Я большой поклонник ускорения моих сборок с использованием "make -j8" (разумеется, заменяя 8 на то, сколько ядер у моего нынешнего компьютера), и параллельная компиляция N файлов обычно очень эффективна для сокращения компиляции времена ... если только некоторые процессы компиляции не занимают достаточно много памяти, чтобы у компьютера не хватило оперативной памяти, и в этом случае все различные процессы компиляции начинают выгружать друг друга, и все замедляется до ползучести, что наносит ущерб цели в первую очередь выполняю параллельную компиляцию.
Теперь очевидное решение этой проблемы - «купить больше оперативной памяти», но, поскольку я слишком дешев, чтобы сделать это, мне приходит в голову, что должна быть возможность реализовать «make» (или эквивалентно), который следит за доступной оперативной памятью системы, и когда объем оперативной памяти падает почти до нуля и система начинает подкачку, make автоматически включается и отправляет SIGSTOP одному или нескольким процессам компиляции, которые он породил. Это позволило бы полностью заменять остановленные процессы, чтобы другие процессы могли завершить компиляцию без дальнейшей замены; затем, когда другие процессы завершают работу и становится доступным больше ОЗУ, процесс 'make' отправляет SIGCONT приостановленным процессам, позволяя им возобновить свою собственную обработку. Таким образом можно было бы избежать большинства перестановок, и я смог бы безопасно скомпилировать все ядра.
Кто-нибудь знает о программе, которая реализует эту логику? Или, наоборот, есть ли веская причина, почему такая программа не работает / не может работать?