Параллельное выполнение
GNU make умеет выполнять несколько рецептов одновременно. Обычно make выполняет только один рецепт за раз, ожидая его завершения перед выполнением следующего. Однако опция ‘-j’ или ‘--jobs’ сообщает make выполнить несколько рецептов одновременно. Вы можете запретить параллелизм для некоторых или всех целей непосредственно в файле make (см. Отключение параллельного выполнения).
В MS-DOS опция ‘-j’ не имеет эффекта, поскольку эта система не поддерживает многопроцессорность.
Если за опцией ‘-j’ следует целое число, это количество рецептов, которые будут выполняться одновременно; это называется числом слотов задач. Если после опции ‘-j’ нет ничего, что похоже на целое число, то ограничений на количество слотов задач нет. По умолчанию количество слотов задач равно одному, что означает последовательное выполнение (по одному действию за раз).
Обработка рекурсивных make вызовов вызывает проблемы для параллельного выполнения. Более подробную информацию об этом см. в Передаче опций подзадаче make.
Если рецепт завершается неудачно (прерывается сигналом или завершается с ненулевым статусом), и ошибки для этого рецепта не игнорируются (см. Ошибки в рецептах), оставшиеся строки рецепта для пересоздания той же цели не будут выполняться. Если рецепт завершается неудачно, и опция ‘-k’ или ‘--keep-going’ не была задана (см. Резюме опций), make прерывает выполнение. Если make завершается по какой-либо причине (включая сигнал) с работающими дочерними процессами, он ожидает их завершения перед фактическим завершением.
При сильной загрузке системы, вероятно, потребуется запустить меньше задач, чем при слабой загрузке. Вы можете использовать опцию ‘-l’ для указания make ограничить количество выполняемых задач одновременно, исходя из средней загрузки. Опция ‘-l’ или ‘--max-load’ следует за числом с плавающей точкой. Например,
-l 2.5
не позволит make запустить более одной задачи, если средняя загрузка превышает 2,5. Опция ‘-l’ без последующего числа удаляет ограничение по загрузке, если оно было задано с предыдущей опцией ‘-l’.
Более точно, когда make собирается запустить задачу, и у него уже запущена хотя бы одна задача, он проверяет текущую среднюю загрузку; если она не ниже предела, заданного с помощью ‘-l’, make ожидает, пока средняя загрузка не опустится ниже этого предела, или пока все остальные задачи не завершатся.
По умолчанию ограничения по загрузке нет.
| • Отключение параллелизма | Отключение параллельного выполнения | |
| • Выходные данные при параллельном выполнении | Обработка выходных данных при параллельном выполнении | |
| • Ввод при параллельном выполнении | Обработка ввода при параллельном выполнении |
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Parallel.html