Makefile 是否有足够智能的并行make系统,能够智能地响应低内存/交换条件?

Makefile 是否有足够智能的并行make系统,能够智能地响应低内存/交换条件?,makefile,ram,process-management,Makefile,Ram,Process Management,我非常喜欢使用“make-j8”(当然,用我当前计算机的内核数替换8)来加快构建速度,并行编译N个文件通常可以非常有效地减少编译时间。。。除非某些编译过程占用了足够的内存,以至于计算机内存不足,在这种情况下,所有不同的编译过程开始相互交换,并且所有的过程都会慢到爬行的速度,从而破坏了并行编译的初衷 现在,这个问题的明显解决方案是“购买更多的RAM”--但因为我太便宜了,所以我想到应该有一个“make”(或等效物)的实现来监视系统的可用RAM,当RAM降到接近零时,系统开始交换,make将自动介入

我非常喜欢使用“make-j8”(当然,用我当前计算机的内核数替换8)来加快构建速度,并行编译N个文件通常可以非常有效地减少编译时间。。。除非某些编译过程占用了足够的内存,以至于计算机内存不足,在这种情况下,所有不同的编译过程开始相互交换,并且所有的过程都会慢到爬行的速度,从而破坏了并行编译的初衷

现在,这个问题的明显解决方案是“购买更多的RAM”--但因为我太便宜了,所以我想到应该有一个“make”(或等效物)的实现来监视系统的可用RAM,当RAM降到接近零时,系统开始交换,make将自动介入并向它产生的一个或多个编译进程发送SIGSTOP。这将允许停止的进程完全交换出去,以便其他进程可以完成编译而无需进一步交换;然后,当其他进程退出并且更多RAM可用时,“make”进程将向暂停的进程发送SIGCONT,允许它们恢复自己的处理。这样可以避免大多数交换,并且我可以安全地在所有内核上编译


有人知道实现这种逻辑的程序吗?或者反过来说,有什么好的理由可以解释为什么这样的程序不能工作?

对于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.
不过,我认为没有标准的选项。

您会接受“否”的答案吗?;)