CPU使用率vs线程数

aus*_*ser 7 optimization performance multithreading

一般来说,CPU使用率与程序中的线程数之间的关系是什么.假设:

  • 多核CPU
  • 线程执行完全相同的工作(假设它们从队列中获取相同的工作项并处理它们)

ami*_*mit 14

这取决于应用程序的性质.

  • 主要进行计算的应用程序- 每个核心1个线程的比率是一个合理的决定,因为您不希望由于开销而产生太多线程,并且您希望利用所有核心.
  • 主要执行IO操作的应用程序(如http请求)可以产生比#cores更多的线程,并且仍然可以提高效率,因为瓶颈是每个IO请求的等待时间,并且您希望每次获得尽可能多的信息你需要等待.

也就是说,您将获得的CPU使用率仍取决于许多因素(IO,同步,程序中的非并行部分).

如果您对应用程序的速度感兴趣- 请始终记住Amdahl定律,即使拥有无限数量的工作核心,它也会严格限制应用程序的时间(加速).


Ste*_*n C 5

除了明显的关系之外,不存在这种一般关系:

  • 应用程序使用的 CPU 时间(CPU 秒)不能多于可用核心数乘以它运行的(挂钟)秒数,并且
  • 单个线程每秒不能使用超过 1 个 CPU 秒。

多线程应用程序的实际 CPU 量主要取决于应用程序的性质以及实现它的方式:

  • 如果每个线程执行的计算不会与其他线程产生锁、内存访问等争用,那么您应该能够接近可用 CPU 资源的理论限制。

  • 争用可能会降低 CPU 的有效使用率,有时甚至会大幅降低。

但没有通用公式可以告诉您可以获得多少加速。