Bird
Raised Fist0
Node.jsframework~20 mins

When to use workers vs cluster in Node.js - Practice Questions

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Node.js Workers vs Cluster Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the main difference between workers and cluster in Node.js
Which statement best describes the primary difference between Node.js workers and cluster modules?
ACluster runs code in multiple threads sharing the same event loop, workers create separate processes.
BWorkers run in separate threads sharing memory, while cluster creates separate processes with independent memory.
CWorkers and cluster both create separate processes but cluster shares memory between them.
DCluster uses threads inside a single process, workers spawn multiple processes.
Attempts:
2 left
💡 Hint
Think about how memory is shared or isolated between threads and processes.
component_behavior
intermediate
2:00remaining
Choosing between workers and cluster for CPU-intensive tasks
You want to perform CPU-heavy calculations without blocking the main Node.js event loop. Which approach is best?
AUse cluster to spawn multiple processes, each handling a part of the calculation.
BUse cluster to run calculations in threads sharing memory to reduce overhead.
CUse a single process with asynchronous callbacks to handle calculations.
DUse workers to run calculations in separate threads without blocking the main thread.
Attempts:
2 left
💡 Hint
Consider which method allows parallel execution without blocking the main event loop.
🔧 Debug
advanced
2:00remaining
Debugging memory usage with cluster vs workers
You notice high memory usage in your Node.js app using cluster. Which cause is most likely?
Node.js
const cluster = require('cluster');
const http = require('http');

if (cluster.isMaster) {
  for (let i = 0; i < 4; i++) {
    cluster.fork();
  }
} else {
  http.createServer((req, res) => {
    res.end('Hello World');
  }).listen(8000);
}
AEach cluster worker is a separate process with its own memory, increasing total memory use.
BCluster workers share memory, so memory usage should be low and shared.
CCluster uses threads that share memory, causing memory leaks if not handled.
DCluster automatically frees memory after each request, so memory usage is unrelated.
Attempts:
2 left
💡 Hint
Think about how processes handle memory separately.
📝 Syntax
advanced
2:00remaining
Correct syntax to create a worker thread in Node.js
Which code snippet correctly creates a worker thread in Node.js?
A
const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js');
B
const cluster = require('cluster');
const worker = cluster.fork('./worker.js');
C
const { Worker } = require('worker_threads');
const worker = Worker('./worker.js');
Dconst worker = new WorkerThreads('./worker.js');
Attempts:
2 left
💡 Hint
Check the correct import and constructor usage for worker threads.
state_output
expert
3:00remaining
Output behavior when using cluster with shared server port
Given the following code, what will be the output when multiple cluster workers listen on the same port?
Node.js
const cluster = require('cluster');
const http = require('http');

if (cluster.isMaster) {
  cluster.fork();
  cluster.fork();
} else {
  http.createServer((req, res) => {
    res.end(`Handled by worker ${process.pid}`);
  }).listen(3000);
  console.log(`Worker ${process.pid} started`);
}
AOnly one worker starts successfully; the other throws an error because the port is already in use.
BBoth workers start but only the first handles requests; the second is idle.
CBoth workers start and share the port; requests are load balanced between them, each responding with its own PID.
DThe master process handles requests and workers do not start.
Attempts:
2 left
💡 Hint
Consider how Node.js cluster module manages server ports across workers.

Practice

(1/5)
1. What is the main reason to use worker_threads in Node.js instead of cluster?
easy
A. To restart crashed processes automatically
B. To create multiple server instances for load balancing
C. To share the same server port across processes
D. To run CPU-heavy tasks without blocking the main thread

Solution

  1. Step 1: Understand worker_threads purpose

    Workers run code in separate threads to handle CPU-intensive tasks without blocking the main event loop.
  2. Step 2: Compare with cluster usage

    Clusters create multiple processes to handle many incoming requests and improve server scalability, not for CPU-heavy tasks.
  3. Final Answer:

    To run CPU-heavy tasks without blocking the main thread -> Option D
  4. Quick Check:

    Workers = CPU tasks [OK]
Hint: Workers handle CPU tasks; clusters handle many requests [OK]
Common Mistakes:
  • Confusing workers with clusters for load balancing
  • Thinking clusters run in threads instead of processes
  • Assuming workers share server ports automatically
2. Which of the following is the correct way to create a worker thread in Node.js?
easy
A. const worker = new Worker('worker.js');
B. const worker = cluster.fork('worker.js');
C. const worker = new Thread('worker.js');
D. const worker = new WorkerThread('worker.js');

Solution

  1. Step 1: Recall worker_threads syntax

    The correct syntax to create a worker thread is using the Worker class from 'worker_threads' module: new Worker('filename').
  2. Step 2: Identify incorrect options

    const worker = cluster.fork('worker.js'); uses cluster.fork which is for clusters, not workers. Options C and D use incorrect class names.
  3. Final Answer:

    const worker = new Worker('worker.js'); -> Option A
  4. Quick Check:

    Worker class = new Worker() [OK]
Hint: Use new Worker() from 'worker_threads' module [OK]
Common Mistakes:
  • Using cluster.fork() to create workers
  • Using wrong class names like Thread or WorkerThread
  • Forgetting to import Worker from 'worker_threads'
3. Consider this Node.js code snippet using cluster:
const cluster = require('cluster');
if (cluster.isPrimary) {
  cluster.fork();
  cluster.fork();
} else {
  console.log('Worker process started');
}
What will be the output when you run this code?
medium
A. No output
B. Worker process started
C. Worker process started Worker process started
D. SyntaxError

Solution

  1. Step 1: Understand cluster.fork behavior

    cluster.fork() creates a new worker process that runs the same script but with cluster.isPrimary false.
  2. Step 2: Count worker processes and output

    Two cluster.fork() calls create two workers, each printing 'Worker process started'. So output appears twice.
  3. Final Answer:

    Worker process started Worker process started -> Option C
  4. Quick Check:

    Two forks = two outputs [OK]
Hint: Each fork runs worker code once [OK]
Common Mistakes:
  • Thinking only one worker runs
  • Expecting output from primary process
  • Confusing cluster.isPrimary with cluster.isWorker
4. This code tries to use workers but has an error:
const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js');
worker.on('message', (msg) => console.log(msg));
worker.postMessage('start');
What is the likely problem here?
medium
A. The worker script must use parentPort to receive messages
B. You cannot send messages to workers using postMessage
C. Worker constructor requires a function, not a file path
D. Missing cluster module import

Solution

  1. Step 1: Check worker communication setup

    Workers communicate via message passing. The worker script must listen on parentPort to receive messages.
  2. Step 2: Identify missing code in worker.js

    If worker.js does not use parentPort.on('message'), it cannot handle messages sent by postMessage, causing no response or error.
  3. Final Answer:

    The worker script must use parentPort to receive messages -> Option A
  4. Quick Check:

    Worker script needs parentPort listener [OK]
Hint: Worker script must listen on parentPort for messages [OK]
Common Mistakes:
  • Thinking postMessage is invalid for workers
  • Confusing worker_threads with cluster usage
  • Assuming Worker constructor takes a function directly
5. You have a Node.js server that handles many HTTP requests and also performs heavy image processing. How should you design your app using workers and cluster for best performance?
hard
A. Use only workers to run multiple server instances and process images
B. Use cluster to run multiple server processes and workers inside each process for image processing
C. Use only cluster to handle requests and do image processing in the main thread
D. Use a single process with no workers or cluster for simplicity

Solution

  1. Step 1: Understand cluster for scaling servers

    Cluster creates multiple processes to handle many HTTP requests efficiently by using multiple CPU cores.
  2. Step 2: Use workers for CPU-heavy tasks

    Heavy image processing should run in worker threads to avoid blocking the event loop in each server process.
  3. Step 3: Combine cluster and workers

    Run cluster to scale server processes, and inside each process, use workers for heavy computation tasks.
  4. Final Answer:

    Use cluster to run multiple server processes and workers inside each process for image processing -> Option B
  5. Quick Check:

    Cluster for scaling + workers for CPU tasks [OK]
Hint: Cluster scales servers; workers handle heavy tasks inside each process [OK]
Common Mistakes:
  • Doing heavy tasks in main thread blocking requests
  • Using only workers without clustering for many requests
  • Ignoring multi-core CPU benefits