gpt4 book ai didi

multithreading - 为什么操作系统线程被认为是昂贵的?

转载 作者:行者123 更新时间:2023-12-03 10:15:27 26 4
gpt4 key购买 nike

有许多解决方案旨在实现“用户空间”线程。无论是 golang.org 的 goroutines、python 的绿色线程、C# 的 async、erlang 的进程等。这个想法是允许并发编程,即使是单个或有限数量的线程。

我不明白的是,为什么操作系统线程如此昂贵?在我看来,无论哪种方式,您都必须保存任务(操作系统线程或用户线程)的堆栈,这是几十 KB,并且您需要一个调度程序来在两个任务之间移动。

操作系统免费提供这两个功能。为什么操作系统线程比“绿色”线程更昂贵?每个“任务”都有一个专用的操作系统线程导致假定性能下降的原因是什么?

最佳答案

我想修改都铎王朝的答案,这是一个很好的起点。线程有两个主要开销:

  • 启动和停止它们。涉及创建堆栈和内核对象。涉及内核转换和全局内核锁。
  • 保持他们的堆栈。

  • (1) 只有当您一直在创建和停止它们时才会出现问题。这通常使用线程池来解决。我认为这个问题实际上已经解决了。在线程池上调度任务通常不需要访问内核,这使得它非常快。开销是一些互锁的内存操作和一些分配的顺序。

    (2) 只有当您有很多线程(> 100 左右)时,这才变得重要。在这种情况下,异步 IO 是一种摆脱线程的方法。我发现如果你没有疯狂的线程数量,包括阻塞在内的同步 IO 比异步 IO 稍快(你没看错:同步 IO 更快)。

    关于multithreading - 为什么操作系统线程被认为是昂贵的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964899/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com