4

我非常喜欢使用“make -j8”(当然,用我当前计算机的核心数量替换 8)来加速我的构建,并且并行编译 N 个文件通常在减少编译时间方面非常有效。 . 除非某些编译过程足够占用内存以致计算机耗尽 RAM,在这种情况下,所有各种编译过程都开始相互交换,一切都变慢了——从而违背了进行并行的目的首先编译。

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

有人知道实现此逻辑的程序吗?或者相反,这样的程序不能/不能工作有什么好的理由吗?

4

1 回答 1

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.

不过,我认为这没有标准选项。

于 2011-04-11T01:36:25.953 回答