В чём разница между worker_threads, child_process и cluster?
Производительность и production
Все три позволяют использовать несколько ядер, но решают разные задачи.
worker_threads
Потоки внутри одного процесса. Могут обмениваться памятью через SharedArrayBuffer и передавать данные через postMessage. Подходят для CPU-тяжёлых вычислений: сжатие, парсинг, криптография.
child_process
Отдельный процесс ОС: spawn, exec, fork. Полная изоляция памяти, можно запускать любые программы (например, ffmpeg). Тяжелее потока и общается через IPC.
cluster
Надстройка над child_process.fork для HTTP-серверов: воркеры делят один серверный порт.
Что выбрать
- Масштабировать обработку запросов: cluster или реплики.
- Посчитать тяжёлое, не блокируя Event Loop: worker_threads.
- Запустить внешнюю программу или скрипт: child_process.
import { Worker } from 'node:worker_threads';
const worker = new Worker('./hash-worker.js', { workerData: { file } });
worker.on('message', (hash) => console.log(hash));Коротко для собеседования
Потоки для вычислений, процессы для изоляции и внешних программ, cluster для распараллеливания сервера по ядрам.