make -j:如果作业数大于 CPU 数,会发生什么情况



当执行 make -jn 时,有 n > m,其中 m 是物理上可用的 CPU 的数量,这些 n - m 个作业会发生什么?是只调度了 m 个作业以执行到操作系统,其余的 n - m 个作业按 make 排队,还是所有 n 个作业都已调度并且操作系统在它们之间切换上下文?

后者:所有调度的n个作业,操作系统在它们之间切换上下文。

Linux 通常尝试以公平的方式处理进程,因此,如果您使用 make -j(没有进程计数限制)编译一个大型项目,这可能会用进程淹没您的机器并使其停止(由于交换,因为所有进程都不适合 RAM)。

Solaris 10没有受到这种影响。

当使用随

作业数量线性扩展的构建系统(例如非递归制作)在 Linux 上进行编译时,经验法则是不要使用比逻辑 CPU 更多的作业(即超线程内核是逻辑 CPU)。一点经验数据。

相关内容

最新更新