Spawn - это команда, предназначенная для запуска системных команд. Когда вы запускаете spawn, вы отправляете ему системную команду, которая будет запускаться в собственном процессе, но не будет выполнять никакого дополнительного кода в процессе вашего узла. Вы можете добавить слушателей для порожденного вами процесса, чтобы ваш код мог взаимодействовать с порожденным процессом, но новый экземпляр V8 не создается (если, конечно, ваша команда не является другой командой Node, но в этом случае вы должны использовать fork!) И на процессоре активна только одна копия вашего узлового модуля.
Fork - это особый экземпляр spawn, который запускает новый экземпляр двигателя V8. Это означает, что вы можете создать несколько воркеров, работающих на одной и той же кодовой базе Node, или, возможно, в другом модуле для конкретной задачи. Это наиболее полезно для создания пула рабочих. Хотя модель асинхронных событий узла позволяет достаточно эффективно использовать одно ядро машины, она не позволяет процессу узла использовать многоядерные машины. Самый простой способ добиться этого - запустить несколько копий одной и той же программы на одном процессоре.
Хорошее эмпирическое правило - от одного до двух узловых процессов на ядро, возможно, больше для машин с хорошим соотношением тактовой частоты оперативной памяти и тактовой частоты процессора, или для узловых процессов, которые сильно загружают ввод-вывод и мало работают с процессором, чтобы минимизировать время простоя события цикл ждет новых событий. Однако последнее предложение представляет собой микрооптимизацию и потребует тщательного тестирования, чтобы убедиться, что ваша ситуация соответствует потребностям многих процессов / ядра. Фактически вы можете снизить производительность, создав слишком много воркеров для вашей машины / сценария.
В конце концов, вы можете использовать spawn так же, как описано выше, отправив spawn команду Node. Но это было бы глупо, потому что fork делает некоторые вещи для оптимизации процесса создания экземпляров V8. Просто поясняю, что в конечном итоге spawn включает вилку. Fork оптимален для этого конкретного и очень полезного варианта использования.
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
var child = require('child_process').fork('child.js');
например, в моем основном приложении, у меня теперь будет работать 2 отдельных ядра. Если бы мне пришлось запустить тяжелый цикл for в child.js (процессе), я бы, по сути, использовал больше ядер для работы child.js, верно? Будет ли это использование процессора влиять на мое основное ядро приложения?TL; DR
Когда мицелий создаются - Это создает потоковый интерфейс между родительским и дочерним процессом.
средства потокового интерфейса - буферизация данных в двоичном формате в
ONE TIME
Когда вилка создаются - Это создает канал связи между родителем и ребенком процессом
средства канала связи - обмен сообщениями
Ну, оба выглядят как будто выполняют одинаковую передачу данных , за исключением разницы ниже
spawn будет полезен, когда вы хотите сделать непрерывный буфер данных в двоичном формате / формате кодирования , например - передать 1 ГБ видеофайла, изображения, файлов журнала в
ONE TIME
fork будет полезен, когда вы хотите отправлять сообщения, например,
JSON
илиXML
обмен даннымиspawn следует использовать для потоковой передачи больших данных / файлов / изображений ОТ процесса spawn К родительскому процессу
fork следует использовать для обмена сообщениями Json / Xml.
источник
FORK
else, если у вас есть очень большой кусок данных для буферизации, тогда используйтеSPAWN
Метод spawn ()
Метод child_process.spawn запускает новый процесс с заданной командой. Он имеет следующую подпись -
Узнать больше о вариантах
Метод spawn () возвращает потоки (stdout и stderr), и его следует использовать, когда процесс возвращает объемный объем данных. spawn () начинает получать ответ, как только процесс начинает выполняться.
Метод fork ()
Метод child_process.fork является частным случаем spawn () для создания процессов Node. Он имеет следующую подпись -
Метод fork возвращает объект со встроенным каналом связи в дополнение к наличию всех методов в обычном экземпляре ChildProcess.
источник