PassFront
  1. PassFront
  2. База знаний
  3. Производительность и production

В чём разница между 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 для распараллеливания сервера по ядрам.

Другие вопросы раздела