Есть ли способ управления порождением child_process ', чтобы он защищал ОС от сбоев?
Да, есть. Вам следует либо использовать какую-то заранее подготовленную систему очередей или систему управления заданиями, где вы предварительно настраиваете, сколько процессов вы хотите работать с этими различными заданиями одновременно, или вы создаете свое собственное.
Как и во всех вопросах здесь, посвященных stackoverflow, вы получите ответ, который будет гораздо более конкретным для вашей конкретной ситуации, если вы включите свой реальный код, который у вас есть сейчас. Но общая концепция заключается в том, что вы создаете рабочую очередь. Вы сами решаете, сколько процессов вы хотите работать одновременно. Когда вы добавляете что-то в очередь, вы проверяете, сколько процессов уже запущено. Если макс уже запущен, то вы просто добавляете задачу в очередь.
Если максимальное число процессов еще не запущено, вы создаете новый процесс, передаете ему самый старый элемент из очереди и увеличиваете счетчик, который отслеживает, сколько дочерних процессов (или рабочих процессов) у вас открыто в данный момент. Вы контролируете каждый процесс, чтобы знать, когда он завершен. Всякий раз, когда кто-то завершает, вы не только обрабатываете результат, но также изменяете счетчик для количества запущенных процессов, а затем, если вы не на максимуме, вы берете следующее задание в очередь и запускаете для него дочерний процесс. .
Дочерние процессы могут либо запускаться до завершения, либо останавливаться для каждого задания, начиная новый для каждого нового элемента, находящегося в очереди, или вы можете попросить их сообщить о завершении, но не завершиться, и вы можете отправить им новый рабочий элемент.
Существует множество пакетов управления заданиями или управления работниками, подобных этому, в npm, или вы можете просто создать свой собственный. Я бы лично взял уже написанную библиотеку, но пригодность для задачи каждой существующей библиотеки зависит от ваших конкретных деталей реализации, которыми вы не поделились.