一般来说,CPU使用率和程序中线程数之间的关系是什么。假设:
- 多核CPU
- 线程执行完全相同的工作(假设它们从队列中获取相同的工作项并处理它们)
一般来说,CPU使用率和程序中线程数之间的关系是什么。假设:
这取决于应用程序的性质。
也就是说,您将获得的 CPU 使用率仍然取决于许多因素(IO、同步、程序中的非并行部分)。
如果您对应用程序的速度感兴趣- 永远记住阿姆达尔定律,它为您的应用程序将花费的时间(加速)提供了严格的限制,即使有无限数量的工作内核也是如此。
没有这样的一般关系,除了明显的关系:
多线程应用程序的实际 CPU 数量主要取决于应用程序的性质以及您实现它的方式:
如果每个线程执行的计算不会与其他线程对锁、内存访问等产生争用,那么您应该能够接近可用 CPU 资源的理论极限。
争用可能会降低有效的 CPU 使用率,有时甚至会显着降低。
但是没有通用的公式可以告诉您可以获得多少加速。
我认为没有关系或不容易。这取决于线程正在执行的工作。具有一个线程的程序可以消耗 100% 的 CPU,而具有大量线程的程序可以消耗更少的 CPU。
如果您正在寻找线程和已完成工作之间的优化关系,您必须研究您的案例,并可能找到一个经验解决方案。
正如其他答案已经指出的那样,“这取决于”。在理想的世界中,对于 n 个内核,您将获得因子 n 的吞吐量,因为您在每个内核上的单独线程中执行相同的工作(这已经包含一个错误的假设,因为您需要以某种方式同步线程时它们从同一个队列中读取)。
了解 Disruptor,硬核并发初学者指南给出了一些很好的例子,你需要在并行任务时考虑什么,并且还展示了一些尝试并行化导致执行时间更长的情况。