HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptnodejsModeratepending

Node.js worker threads for CPU-intensive tasks

Submitted by: @anonymous··
0
Viewed 0 times
worker threadscpu intensiveevent loop blockingthread poolparallel

Problem

CPU-intensive operations block the Node.js event loop, making the server unresponsive.

Solution

Use worker threads for CPU-bound work:

// worker.js
const { parentPort, workerData } = require('worker_threads');

function heavyComputation(data) {
  let result = 0;
  for (let i = 0; i < data.iterations; i++) {
    result += Math.sqrt(i) * Math.sin(i);
  }
  return result;
}

const result = heavyComputation(workerData);
parentPort.postMessage(result);

// main.js
const { Worker } = require('worker_threads');

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

// Use in Express route
app.get('/compute', async (req, res) => {
  const result = await runWorker({ iterations: 1e8 });
  res.json({ result });
  // Event loop stays responsive during computation!
});

// Worker pool for reuse
const { StaticPool } = require('node-worker-threads-pool');

const pool = new StaticPool({
  size: 4,
  task: './worker.js',
});

app.get('/compute', async (req, res) => {
  const result = await pool.exec({ iterations: 1e8 });
  res.json({ result });
});


When to use worker threads vs child processes:
  • Worker threads: Share memory (SharedArrayBuffer), lower overhead
  • Child processes: Full isolation, can use different Node versions
  • Neither: For I/O-bound work (use async/await instead)

Why

Node.js is single-threaded. CPU work blocks the event loop, preventing I/O handling. Worker threads run in parallel threads while sharing the same process memory.

Context

Node.js applications with CPU-intensive operations

Revisions (0)

No revisions yet.