В этой статье мы обсудим разницу между методами spawn () и fork () в Node.js. Оба являются способами создания дочерних процессов в Node.js для обработки возрастающих рабочих нагрузок.
Метод Spawn (): процесс spawn инициирует команду в новом процессе. Мы можем передать ему команду в качестве аргумента. Результатом функции порождения является экземпляр дочернего процесса, который реализует EventEmitterAPI. Обработчики событий могут быть присоединены или зарегистрированы к созданному дочернему экземпляру. Некоторые из событий, которые могут быть прикреплены или зарегистрированы в этих дочерних экземплярах, — это отключение, ошибка, закрытие, сообщение и т. Д.
Параметры: этот метод принимает следующие параметры.
- command:принимает команды для запуска в виде строки.
- args:это список строковых аргументов. Значение по умолчанию — пустой массив.
- options:этот объект параметров может иметь различные свойства, такие как stdio, uid, gid, shell и т. д.
- shell: принимает логическое значение. Если true, запускает команду внутри оболочки. Другая оболочка может быть указана в виде строки. Значение по умолчанию — false, что означает отсутствие оболочки.
Возвращаемое значение: возвращает экземпляр дочернего процесса.
Пример: это очень простой и общий пример использования spawn. Сначала мы потребовали порождение путем деструктуризации, а затем создали дочерний процесс, передав аргументы. Затем зарегистрируйте событие stdout для этого дочернего процесса.
Javascript
const { spawn } = require(
'child_process'
);
const child = spawn(
'dir'
, [
'D:\\empty'
], { shell:
true
});
child.stdout.on(
'data'
, (data) => {
console.log(`stdout ${data}`);
});
Выход:
Метод Fork (): метод fork — это частный случай метода spawn. Основное преимущество использования метода fork заключается в том, что он позволяет родительскому и дочернему процессам обмениваться данными. При этом каждому дочернему процессу выделяется собственная память, что может повлиять на производительность приложения.
Параметры: этот метод принимает следующие параметры.
- modulePath:принимает модуль для запуска в виде строки.
- args:это список строковых аргументов.
Пример: создайте два файла с именами server.js и child.js, как показано ниже.
js
const { fork } = require(
'child_process'
);
const childProcess = fork(__dirname +
'/child.js'
);
childProcess.on(
'message'
, (message) => {
console.log(`There is a message from child
""
${message}
""
`);
});
js
process.send(
'Hello from child'
);
Выход:
Сообщение, отправленное из child.js, печатается в файле sever.js из-за использования дочернего процесса fork.
Разница между дочерним процессом Spawn и Fork:
Spawn | Fork |
При этом начинается отправка данных обратно родительскому процессу из дочернего процесса, как только дочерний процесс начинает выполняться. | Это не отправляет данные автоматически, но мы можем использовать процесс глобального имени модуля для отправки данных из дочернего процесса и в родительском модуле, используя имя дочернего процесса, который процесс будет отправлять дочернему процессу. |
Он создает новый процесс с помощью команды, а не запускается в том же процессе узла. | Он создает несколько отдельных процессов (дочерних процессов), но все они работают в том же процессе узла, что и родительский. |
При этом новый экземпляр V8 не создается. | При этом создается новый экземпляр V8. |
Он используется, когда мы хотим, чтобы дочерний процесс возвращал большой объем данных родительскому процессу. | Он используется для отделения ресурсоемких задач от основного цикла обработки событий. |