我非常喜欢使用“make -j8”加速我的构建(当然,用当前计算机的核心数替换8),并行编译N个文件通常非常有效地减少编译时间...除非某些编译过程占用大量内存,计算机耗尽RAM,在这种情况下,所有各种编译过程都会开始互相交换,所有内容都会慢慢爬行 - 从而无法实现首先进行并行编译。
现在,这个问题的显而易见的解决方案是“购买更多内存” - 但由于我太便宜而无法做到这一点,我觉得它应该可以实现'make'(或者等效的)监视系统的可用RAM,当RAM降到接近零并且系统开始交换时,make会自动进入并向它产生的一个或多个编译进程发送SIGSTOP。这将允许已停止的进程完全换出,以便其他进程可以完成编译而无需进一步交换;然后,当其他进程退出并且更多RAM可用时,'make'进程将向暂停的进程发送SIGCONT,允许它们恢复自己的处理。这样就可以避免大多数交换,我可以安全地在所有核心上进行编译。
是否有人知道实现此逻辑的程序?或者相反,是否有一些很好的理由说明为什么这样的程序不会/不能工作?
答案 0 :(得分:0)
对于GNU Make,有-l
选项:
-l [load], --load-average[=load]
Specifies that no new jobs (commands) should be started if there are others jobs running and the load average is at least load (a floating-
point number). With no argument, removes a previous load limit.
我不认为这有一个标准选项。