Worker Threads in Node.js allow you to run JavaScript operations on multiple threads. This enables true parallelism for CPU-intensive tasks, keeping the main event loop unblocked.
What Are Worker Threads?
- Worker Threads run JavaScript code in parallel, using additional threads in the same Node.js process.
- They are useful when you need to perform heavy calculations without blocking the main event loop.
Key Differences: Worker Threads vs. Clustering
| Feature | Worker Threads | Cluster Module |
|---|---|---|
| Process Model | Multiple threads, single process | Multiple processes |
| Memory Isolation | Shared memory (via SharedArrayBuffer) |
Completely separate memory spaces |
| Overhead | Low (threads share memory) | Higher (processes don't share memory) |
| Use Case | CPU-bound tasks, sharing memory | Scaling HTTP servers, high reliability |
When to Use Worker Threads:
- Performing heavy, synchronous computations (e.g., image processing, cryptography)
- Sharing memory between tasks with
SharedArrayBuffer - Processing data in the background while keeping the main thread fast
When to Use Clustering:
- Scaling networked applications (like HTTP servers) across multiple CPU cores
- Isolating crashes (worker process crashes don't affect others)
Example: Running a Heavy Function Using Worker Threads
// worker.js
const { parentPort } = require('worker_threads');
parentPort.on('message', (num) => {
// simulate CPU intensive work
let result = 0;
for (let i = 0; i < num * 1e6; i++) result += i;
parentPort.postMessage(result);
});
// main.js
const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js');
worker.postMessage(100);
worker.on('message', (result) => {
console.log('Result:', result);
});
Summary
- Use Worker Threads for heavy, blocking JavaScript code and when tasks need to share memory.
- Use Clustering to scale server applications and ensure process isolation.
Top comments (0)