作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用线程可以显着提高性能,因为有更多的“ 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/
我是一名优秀的程序员,十分优秀!