在计算密集型的程序中,最佳线程数就是CPU的核数*个数。
这是因为在SMP(对称多处理器)环境下,每个CPU都有一个可执行队列(run_queue)。如果一个进程处于TASK_RUNNING状态(可执行状态)则它会被加入到其中一个run_queue(且同一时刻仅会被加入到一个run_queue),以便让调度程序安排它在这个run_queue对应的CPU上面运行。一个进程一旦被安排在某个CPU上运行,往后进程调度程序也会将它安排在相同的CPU上运行。每隔 200ms,处理器都会检查 CPU 的负载是否不均衡;如果不均衡,Linux会将任务从负载重的 CPU 上移动到负载轻的 CPU 上。
所以小修正一下:
最佳线程数 = ((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量。
对于计算密集型的,可以近似认为CPU被充分利用。所以是CPU的个数。
对于IO密集型的,这个值可以略微大一些。