
每个人都在编写多线程程序. 您知道在具有多核CPU的服务器上有多少个线程更合适?
在这里,我们必须首先阐明CPU,内核和处理器数量的概念.
例如,当使用顶部查看负载时,按1查看CPU0〜CPUn. 这里的数字实际上是处理器的数量.

在使用cat / proc / cpuinfo看到的输出中,您可以看到cpu内核和处理器的概念.
这些概念之间有什么区别?
在澄清了这些概念之后,我们应该如何选择设置程序中的线程数?

理论上,对于计算密集型任务,线程数应与CPU可以提供的并行度数相同. 这里的“并行数”应该使用物理核的数量还是处理器的数量?
讲事实.
我使用了2个CPU,每个CPU 12个物理核心以及每个物理核心2个逻辑处理器进行测试. 线程数分别为6、10、12、30、48和96.

可以看出,如果线程数超过处理器数(48)或少于物理核心数(24),吞吐量将受到极大影响. 因此,对于测试中计算量大的任务,线程数应设置为24至48.
具体来说,吞吐量和CPU负载在24(物理内核数)和48(处理器数)之间没有显着变化. 但是,“ 99”延迟缓慢增加(10%),而平均延迟则略有减少(4%).
还可以看到有关延迟的更具体的统计信息,随着线程数量的减少,延迟曲线的毛刺也会减少.

那么,为什么这里的“超线程”技术没有像理论上那样增加并行度,从而增加了吞吐量?
我认为可能是因为在我的程序(和大多数程序)中,各种计算组件(FPU \ ALU)的使用不统一. 通常,使用ALU占大多数,而使用FPU仅占少量. 因此,超线程技术并不会带来很大的并行度提升. 线程切换带来的消耗也抵消了这一点改进.
总而言之,对于计算量大的任务,通常建议将线程数设置为物理内核数. 具体来说,还需要对不同的过程执行相应的压力测试,以获得适当的参数选择.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-308514-1.html
就晓得淘宝马上要短命了