为什么运行比处理器核心数更多的进程是个坏主意?

时间:2016-12-10 18:24:14

标签: parallel-processing operating-system

例如,我有一台带有2个核心的机器。假设我有一个任务队列要清除使用名为ninja的程序。

以下哪项可以更快地完成工作,即清除队列中的所有任务。

  1. ./ninja &
    ./ninja &
  2. 运行忍者超过我的核心数

    1. ./ninja &
      ./ninja &
      ./ninja &
      ./ninja &

1 个答案:

答案 0 :(得分:3)

如果您考虑要执行大量任务,这更容易考虑。你应该运行多少取决于进程实际上在做什么。

如果所有进程都是计算绑定的,则花费相同的时间,并且在并行运行时不消耗整个内存,您希望实时进程计数随时与核心数相匹配。这样,每个核心运行相同的时间,而无需上下文切换到其他处理器。

如果任何时刻的实时进程数超过了计算机的内存可用性,并且它们正在进行计算,那么您只需强制进行大量分页,这将严重损害运行时。

如果进程正在执行大量I / O并且等待事件卡住(磁盘数据读取,输入设备,输出缓冲区完全阻塞),那么您需要更多实时进程以便有进程avaialbe在其他进程被阻止时继续工作。

如果内存需求大小的进程不同,您将首先运行最大的进程,并使用内存需求较少的进程填充内存。这通常很难做到,因为您经常不知道每个进程的内存需求。如果你有很多很多的任务,你可以贪婪地运行一个大的和一个小的适合,从统计学上你可能会做得很好。

如果你只有少数(你显示4),你可以尝试组合并看看。