Skip to content
Go back

Using Worker Threads in Node.js for CPU-Bound Tasks

Using Worker Threads in Node.js for CPU-Bound Tasks

Introduction

Offloading heavy computations to worker threads prevents blocking the event loop and improves Node.js application responsiveness.

Prerequisites

Step 1: Create Worker File

Create worker.js:

const { parentPort } = require("worker_threads");

// Listen for messages from the parent thread
parentPort.on("message", data => {
  // Perform CPU-intensive task
  let result = 0;
  for (let i = 0; i < data.iterations; i++) {
    result += Math.sqrt(i);
  }
  parentPort.postMessage({ result });
});

Step 2: Main Thread Implementation

Create main.js:

const { Worker } = require("worker_threads");

function runService(iterations) {
  return new Promise((resolve, reject) => {
    const worker = new Worker("./worker.js");
    worker.postMessage({ iterations });
    worker.on("message", resolve);
    worker.on("error", reject);
    worker.on("exit", code => {
      if (code !== 0)
        reject(new Error(`Worker stopped with exit code ${code}`));
    });
  });
}

(async () => {
  const { result } = await runService(1e7);
  console.log(`Result: ${result}`);
})();

Step 3: Run the Service

node main.js

Summary

Worker threads enable parallel CPU-bound processing, enhancing throughput and keeping the event loop responsive.


Share this post on:

Previous Post
Implementing JWT Authentication in Node.js Without Libraries
Next Post
Optimizing Node.js Server Performance with Clustering