5 min read
•Question 49 of 62hardWhat are Worker Threads in Node.js?
Understanding worker threads for CPU-intensive tasks.
What You'll Learn
- What worker threads are
- When to use them
- How to implement
What are Worker Threads?
Worker Threads allow running JavaScript in parallel threads, useful for CPU-intensive tasks without blocking the main thread.
Worker Threads vs Cluster
| Feature | Worker Threads | Cluster |
|---|---|---|
| Memory | Shared (SharedArrayBuffer) | Separate |
| Use case | CPU-intensive tasks | Scaling HTTP servers |
| Communication | postMessage, shared memory | IPC |
Basic Example
code.jsJavaScript
// main.js
const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js', {
workerData: { num: 42 }
});
worker.on('message', (result) => {
console.log('Result:', result);
});
worker.on('error', (err) => {
console.error('Worker error:', err);
});
worker.on('exit', (code) => {
console.log('Worker exited with code:', code);
});code.jsJavaScript
// worker.js
const { parentPort, workerData } = require('worker_threads');
// CPU-intensive calculation
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
const result = fibonacci(workerData.num);
parentPort.postMessage(result);Shared Memory
code.jsJavaScript
// main.js
const { Worker } = require('worker_threads');
const sharedBuffer = new SharedArrayBuffer(4);
const sharedArray = new Int32Array(sharedBuffer);
const worker = new Worker('./worker.js', {
workerData: { sharedBuffer }
});
// worker.js
const { workerData } = require('worker_threads');
const sharedArray = new Int32Array(workerData.sharedBuffer);
Atomics.add(sharedArray, 0, 1);