cpu 工作量是否在多线程中线性增加?

Did cpu workload increased linearly in multithreading?

如果单线程消耗多核的 25% 工作量CPU,是否 4 个线程会填满 CPU?

除了 4 个线程,我还能用 CPU 做点别的吗?

如果一个线程使用了 25% 的 CPU,那么剩下的 75% 是什么?

如果答案是,没有任何东西 正在使用另外 75%——如果 CPU 有 75% 的时间是空闲的——那么单线程不是 cpu-bound。也就是说,CPU 周期的可用性以外的其他因素正在限制程序的速度。

什么阻塞线程?可能线程正在等待一些资源;来自网络、磁盘 I/O、用户输入等的消息。无论是什么,如果至少有四个,并且如果您的程序可以构造为 concurrently 使用其中四个,那么也许运行四个线程将使程序运行快四倍。

举个例子,如果您的程序是某种服务器,并且它花费大量时间等待来自客户端的消息,那么添加更多线程将允许它同时等待更多消息,这将提高吞吐量。

一个反例是,如果您的程序正在处理来自单个磁盘文件的数据,并且它花费大部分时间等待来自磁盘的数据。由于只有一个磁盘,而且磁盘只能转得这么快,在这种情况下添加更多线程也无济于事。