дочерний процесс node.js – разница между spawn & fork

Это может показаться основным вопросом, но я не нашел никакой документации:

В чем разница между forking и нерестом процесса node.js? Я прочитал, что forking – это особый случай нереста, но каковы различные варианты использования / рецензии на использование каждого из них?

Spawn – это команда, предназначенная для запуска системных команд. Когда вы запускаете spawn, вы отправляете ему системную команду, которая будет запускаться в собственном процессе, но не выполняет никакого дополнительного кода в вашем узле. Вы можете добавить слушателей для процесса, который вы создали, чтобы ваш код взаимодействовал с порожденным процессом, но новый экземпляр V8 не создается (если, конечно, ваша команда не является другой командой Node, но в этом случае вы должны использовать fork!) И на процессоре активна только одна копия вашего узла.

Вилка – специальный экземпляр икры, который запускает новый экземпляр двигателя V8. Значит, вы можете создать несколько сотрудников, работающих на одной и той же базе кода узла или, возможно, на другом модуле для конкретной задачи. Это наиболее полезно для создания рабочего пула. Хотя асинхронная модель узла узла позволяет использовать одно kernel ​​машины достаточно эффективно, она не позволяет процессу узла использовать многоядерные машины. Самый простой способ добиться этого – запустить несколько копий одной и той же программы на одном процессоре.

Хорошее эмпирическое правило – от одного до двух процессов узла на kernel, возможно, больше для машин с хорошим соотношением тактовых импульсов / часов процессора или для интенсивных процессов ввода-вывода и освещения работы ЦП, чтобы минимизировать время простоя события цикл ждет новых событий. Однако последнее предложение представляет собой микро-оптимизацию и потребует тщательного бенчмаркинга, чтобы ваша ситуация соответствовала потребностям многих процессов / ядер. Фактически вы можете снизить производительность, создавая слишком много рабочих для вашего компьютера / сценария.

В конечном счете вы могли бы использовать икру таким образом, чтобы сделать это, отправив породу команду Node. Но это было бы глупо, потому что fork делает некоторые вещи, чтобы оптимизировать процесс создания экземпляров V8. Просто давая понять, что в конечном итоге икру охватывает вилку. Вилка просто оптимальна для этого конкретного и очень полезного случая использования.

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

  • spawnchild_process.spawn запускает новый процесс с заданной командой.
  • fork – метод child_process.fork является особым случаем создания spawn () для создания дочерних процессов.

Метод spawn ()

Метод child_process.spawn запускает новый процесс с заданной командой. Он имеет следующую подпись –

 child_process.spawn(command[, args][, options]) 

Подробнее о вариантах

Метод spawn () возвращает streamи (stdout & stderr), и он должен использоваться, когда процесс возвращает объем данных. spawn () начинает получать ответ, как только процесс начинает выполняться.

Метод fork ()

Метод child_process.fork является особым случаем spawn () для создания процессов узла. Он имеет следующую подпись –

  child_process.fork(modulePath[, args][, options]) 

Метод fork возвращает объект со встроенным каналом связи в дополнение к всем методам в обычном экземпляре ChildProcess.

Interesting Posts
Давайте будем гением компьютера.