AceDevHub
Advanced Node.js Interview QuestionsAdvancedPractical

Node.js · Question 69

How do worker threads work in Node.js?

Direct answer

worker_threads spawn isolated V8 isolates with message passing via postMessage and SharedArrayBuffer for shared memory — import worker from worker file path, listen for message/error/exit, terminate when done.

Worker threads run JavaScript in parallel without blocking the main event loop — each worker has its own event loop but shares process resources more lightly than cluster forks.

  • new Worker('./task.js') — worker file or eval string with workerData option.
  • postMessage / parentPort — structured clone transfer; Transferable for ArrayBuffer.
  • SharedArrayBuffer — low-latency shared memory; requires careful synchronization.
  • Pool pattern — reuse workers for repeated jobs; avoid spawn cost per request.
worker-thread.mjs
import { Worker } from "node:worker_threads";

function runWorker(data) {
  return new Promise((resolve, reject) => {
    const worker = new Worker("./hash-worker.mjs", { workerData: data });
    worker.on("message", resolve);
    worker.on("error", reject);
    worker.on("exit", (code) => {
      if (code !== 0) reject(new Error(`Worker stopped with ${code}`));
    });
  });
}

// hash-worker.mjs: parentPort.postMessage(hashResult)