узел.JS дочерний процесс-разница между spawn & fork



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



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

626   2  

2 ответов:

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

Fork-это специальный экземпляр spawn, который запускает новый экземпляр двигателя V8. Это означает, что вы можете по существу создать несколько работников, работающих на одной и той же базе кода узла или, возможно, на другом модуле для конкретной задачи. Это наиболее полезно для создания рабочего пула. Хотя асинхронная модель событий узла позволяет достаточно эффективно использовать одно ядро машины, она не позволяет процессу узла использовать многоядерные машины. Простой способ для этого необходимо запустить несколько копий одной и той же программы на одном процессоре.

хорошим эмпирическим правилом является один-два узловых процесса на ядро, возможно, больше для машин с хорошим соотношением часов ram/cpu или для узловых процессов с тяжелым вводом/выводом и легкой работой процессора, чтобы минимизировать время простоя, цикл событий ждет новых событий. Однако последнее предложение является микро-оптимизацией и требует тщательного бенчмаркинга, чтобы ваша ситуация соответствовала необходимости многие процессы / ядро. Вы можете фактически снизить производительность, создав слишком много рабочих для вашей машины / сценария.

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

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

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

метод spawn ()

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

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

Читать далее о опции

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

метод вилки ()

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

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

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

Comments

    Ничего не найдено.