一般来说,CPU使用率与程序中的线程数之间的关系是什么。 假设:
答案 0 :(得分:14)
这取决于应用程序的性质。
也就是说,您将获得的CPU使用率仍取决于许多因素(IO,同步,程序中的非并行部分)。
如果您对速度感兴趣,那么应用程序将始终记住Amdahl's law,这将严格限制您的应用程序将采取的时间(加速) ,即使拥有无限数量的工作核心。
答案 1 :(得分:4)
除了明显的关系之外,没有这样的一般关系:
多线程应用程序的实际CPU数量主要取决于应用程序的性质以及实现它的方式:
如果每个线程执行的计算不会产生与其他线程争用锁,内存访问等的争用,那么您应该能够接近可用CPU资源的理论限制。
争用可能会降低有效的CPU使用率,有时会非常显着。
但是没有通用公式可以告诉你可以获得多少加速。
答案 2 :(得分:1)
我认为没有关系或不容易。这取决于线程正在做的工作。具有一个线程的程序可以占用100%的CPU,而具有大量线程的程序可以消耗更少的。
如果您正在寻找线程和完成工作之间的优化关系,您必须研究您的案例,并可能找到一个经验解决方案。
答案 3 :(得分:1)
正如其他答案已经陈述的那样,“它取决于”。在一个理想的世界中,对于n个核心,你会得到因子n的吞吐量,因为你在每个核心的一个单独的线程中做同样的工作(已经包含一个错误的假设,因为你需要以某种方式同步线程从同一队列中读取。)
Understanding the Disruptor, a Beginner's Guide to Hardcore Concurrency提供了一些很好的例子,说明在并行任务时需要考虑的事项,并且还显示了并行化尝试导致执行时间更长的一些情况。