Відповіді:
Spawn - це команда, призначена для запуску системних команд. Коли ви запускаєте нерест, ви надсилаєте йому системну команду, яка буде запускатися в його власному процесі, але не виконує жодного подальшого коду у вашому процесі вузла. Ви можете додати слухачів до процесу, який ви породили, щоб дозволити вашому коду взаємодіяти з породженим процесом, але новий екземпляр V8 не створюється (якщо, звичайно, ваша команда не є іншою командою Node, але в цьому випадку ви повинні використовувати fork!) І у процесорі активна лише одна копія вашого модуля вузла.
Fork - це особливий екземпляр нересту, який запускає новий екземпляр двигуна V8. Це означає, що ви можете створити декілька робітників, які працюють на тій же самій кодовій базі вузла або, можливо, інший модуль для конкретного завдання. Це найбільш корисно для створення пулу працівників. Хоча модель події асинхронізації вузла дозволяє використовувати одне ядро машини досить ефективно, воно не дозволяє процесу вузла використовувати багатоядерні машини. Найпростіший спосіб досягти цього - це запустити кілька копій однієї програми на одному процесорі.
Хорошим правилом є один-два вузлові процеси на одне ядро, можливо більше для машин з хорошим співвідношенням тактових частот / процесорних процесорів або для вузлових процесів, важких для вводу / виводу та легкої роботи процесора, щоб мінімізувати час простою події петля чекає нових подій. Однак остання пропозиція є мікрооптимізацією, і вона потребує ретельного бенчмаркінгу, щоб переконатися, що ваша ситуація відповідає потребі багатьох процесів / ядер. Ви можете фактично знизити продуктивність, нерестуючи занадто багато працівників для вашої машини / сценарію.
Зрештою, ви можете використати spawn способом, який зробив вище, надсилаючи spawn команду Node. Але це було б нерозумно, адже fork робить деякі речі для оптимізації процесу створення екземплярів V8. Тільки даючи зрозуміти, що в кінцевому рахунку нерест охоплює вилку. Вилка просто оптимальна для даного конкретного та дуже корисного випадку використання.
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
TLDR
Spawn
Коли міцелій створюються - Це створює потоковий інтерфейс між батьківським і дочірнім процесом.
засоби потокового інтерфейсу - буферизація даних у двійковому форматі вONE TIME
Fork
Коли вилка створюється - це створює канал зв'язку між батьком і дочірнім процесом
засоби зв'язку - засоби обміну повідомленнями
Difference
Добре обидва виглядають як одна і та ж передача даних , за винятком різниці
нерест буде корисний, коли ви хочете робити безперервний буфер даних у форматі двійкового / кодування , наприклад - передача 1гб відеофайлу, зображення, файлів журналу вONE TIME
fork стане в нагоді, коли ви хочете робити обмін повідомленнями
Eg - JSON
або XML
обмін даними
Conslusion
spawn слід використовувати для потокової передачі великих даних / файлів / зображень ВІД процесу нересту до батьківського процесу
fork має використовуватися для обміну повідомленнями Json / Xml.
FORK
інше, якщо у вас є дуже великий фрагмент даних, які потрібно передати БЮФЕР, то використовуйтеSPAWN
Метод child_process.spawn запускає новий процес із заданою командою. Він має такий підпис -
child_process.spawn(command[, args][, options])
Детальніше про варіанти
Метод spawn () повертає потоки (stdout & stderr), і його слід використовувати, коли процес повертає об'ємну кількість даних. spawn () починає отримувати відповідь, як тільки процес починає виконувати.
Метод child_process.fork - це особливий випадок spawn () для створення процесів Node. Він має такий підпис -
child_process.fork(modulePath[, args][, options])
Метод fork повертає об'єкт із вбудованим каналом зв’язку на додаток до всіх методів у звичайному екземплярі ChildProcess.
var child = require('child_process').fork('child.js');
наприклад, в основному додатку, у мене зараз будуть працювати два окремі ядра. Якби я запустив важкий цикл для child.js (процес), я б по суті використовував більше ядер для живлення child.js, правда? Чи може це використання процесора впливати на моє основне ядро додатка?