gpt4 book ai didi

c - 线程,为什么 1000 个线程和 2000 个线程没有太大明显区别

转载 作者:行者123 更新时间:2023-11-30 21:27:58 25 4
gpt4 key购买 nike

使用线程可以显着提高性能,因为有更多的“ worker ”来执行这项工作。然而,我进行了测试并注意到,前几个线程对性能影响最大。

为什么对于大量线程(例如 1000 和 2000 个线程),时间变得几乎恒定?

是不是因为没有足够的工作要做,所以大多数人都在 sleep 等待工作出现?

编辑:我用 C 语言制作了一个多线程查找器,它的作用就像 bash 中的 find 命令一样。我花了一些时间使用不同数量的线程(phread_create),并注意到仅创建几个线程即可获得最大的性能影响。然而,40个线程和600个线程的时间几乎相同。为什么会这样?

谢谢

最佳答案

正如评论中已经提到的,没有必要拥有比 CPU 核心更多的线程。如果线程数多于 CPU 核心数,实际上会获得更低的性能,因为内核会浪费 CPU 周期来切换线程。线程越多,在它们之间切换所浪费的时间就越多,至少一般来说,这也与应用程序的性质有关。

此外,当您有许多线程需要在之间切换时,您更有可能进行缓存垃圾处理。澄清一下:

当线程1执行时,它在CPU缓存中有自己的数据。但是当切换出去并且线程2进来时,它会从实内存中读取数据(比缓存花费更长的时间)并将其放入缓存中。当 thread1 返回时也会发生同样的事情,它必须再次从实内存中读取。从统计上看,您拥有的线程越多,这种情况发生的频率就越高。但同样,这取决于所完成工作的性质,每个线程每次执行时从实内存读取多少数据以进行缓存。

关于c - 线程,为什么 1000 个线程和 2000 个线程没有太大明显区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747975/

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