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
Recall & Review
beginner
What is the purpose of forking workers per CPU core in Node.js?
Forking workers per CPU core allows Node.js to create multiple child processes, each running on a separate CPU core. This helps to utilize all CPU cores efficiently and improves the performance of CPU-bound tasks.
Click to reveal answer
beginner
Which Node.js module is commonly used to fork workers for each CPU core?
The 'cluster' module is used to fork workers in Node.js. It helps create child processes that share the same server port, enabling load balancing across CPU cores.
Click to reveal answer
beginner
How do you determine the number of CPU cores available in a Node.js application?
You can use the 'os' module's 'cpus()' method, which returns an array of CPU core info. The length of this array indicates the number of CPU cores available.
Click to reveal answer
intermediate
What happens if a worker process crashes in a cluster setup?
If a worker crashes, the master process can listen for the 'exit' event and fork a new worker to replace it. This ensures the application remains available and resilient.
Click to reveal answer
intermediate
Why should you avoid sharing state directly between worker processes?
Each worker runs in its own process with separate memory. Sharing state directly is not possible and can cause bugs. Instead, use inter-process communication or external stores like databases.
Click to reveal answer
Which Node.js module helps you create worker processes for each CPU core?
Acluster
Bhttp
Cfs
Devents
✗ Incorrect
The 'cluster' module is designed to fork worker processes to utilize multiple CPU cores.
How do you find the number of CPU cores in Node.js?
Aos.cpus().length
Bos.cpuCount()
Cprocess.cpuCount
Dos.cores()
✗ Incorrect
The 'os.cpus()' method returns an array of CPU cores, so its length gives the number of cores.
What is the role of the master process in a cluster?
AHandles all HTTP requests alone
BRuns the database
CForks worker processes and manages them
DManages file system operations
✗ Incorrect
The master process forks and manages worker processes in a cluster setup.
If a worker process crashes, what should the master process do?
ALog the error and stop all workers
BRestart the entire server
CDo nothing
DFork a new worker to replace it
✗ Incorrect
The master process should fork a new worker to keep the application running smoothly.
Why can't worker processes share memory directly?
ABecause Node.js forbids it
BBecause they run in separate processes
CBecause of network restrictions
DBecause of file system locks
✗ Incorrect
Worker processes run in separate memory spaces, so direct memory sharing is not possible.
Explain how to use the cluster module to fork workers per CPU core in Node.js.
Think about how the master process manages workers and uses CPU info.
You got /5 concepts.
Describe why forking workers per CPU core improves Node.js application performance.
Consider how multiple CPU cores can be used to do more work at the same time.
You got /5 concepts.
Practice
(1/5)
1. What is the main reason to fork workers equal to the number of CPU cores in a Node.js app?
easy
A. To make the app run slower for debugging purposes
B. To use all CPU cores and improve performance by running tasks in parallel
C. To reduce memory usage by limiting the number of processes
D. To avoid using the cluster module
Solution
Step 1: Understand CPU cores and parallelism
Each CPU core can run one process at a time, so using all cores means better performance.
Step 2: Role of forking workers
Forking workers equal to CPU cores lets Node.js run multiple tasks simultaneously, improving speed.
Final Answer:
To use all CPU cores and improve performance by running tasks in parallel -> Option B
Quick Check:
Fork workers = use all cores = better performance [OK]
Hint: More workers = more CPU cores used = faster app [OK]
Common Mistakes:
Thinking forking reduces memory usage
Believing forking slows the app
Confusing cluster module usage
2. Which of the following is the correct way to get the number of CPU cores in Node.js for forking workers?
easy
A. const cores = require('os').cpus().length;
B. const cores = require('cluster').cpuCount;
C. const cores = require('os').cpuCount();
D. const cores = require('os').cpus.length;
Solution
Step 1: Check Node.js os module usage
The os module has a method cpus() that returns an array of CPU core info.
Step 2: Correct syntax to get core count
Using cpus().length gives the number of CPU cores available.
Final Answer:
const cores = require('os').cpus().length; -> Option A
Hint: Use os.cpus().length to count CPU cores [OK]
Common Mistakes:
Forgetting parentheses after cpus
Using non-existent cpuCount method
Trying to get cores from cluster module
3. Given this code snippet, what will be logged when run on a machine with 4 CPU cores?
const cluster = require('cluster');
const os = require('os');
if (cluster.isPrimary) {
const numCPUs = os.cpus().length;
console.log(`Primary process is running`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
console.log(`Worker ${process.pid} started`);
}
medium
A. Primary process is running
Worker 1234 started
Worker 1235 started
Worker 1236 started
Worker 1237 started
B. Primary process is running
Worker started
Worker started
Worker started
Worker started
C. Primary process is running
Worker 1234 started
D. SyntaxError due to missing cluster setup
Solution
Step 1: Identify primary and worker behavior
The primary logs once and forks 4 workers (one per CPU core).
Step 2: Each worker logs its own process id
Each worker logs "Worker [pid] started" with its unique process id.
Final Answer:
Primary process is running
Worker 1234 started
Worker 1235 started
Worker 1236 started
Worker 1237 started -> Option A
Quick Check:
Primary logs once, 4 workers log with pids [OK]
Hint: Primary logs once; each worker logs with unique pid [OK]
Common Mistakes:
Assuming workers log without pid
Thinking only one worker starts
Confusing primary and worker logs
4. What is wrong with this code snippet that tries to fork workers per CPU core?
const cluster = require('cluster');
const os = require('os');
if (cluster.isPrimary) {
const numCPUs = os.cpus.length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
console.log('Worker started');
}
medium
A. cluster.fork() is not a function
B. No error; code works fine
C. Missing else block for worker process
D. os.cpus.length is undefined; should be os.cpus().length
Solution
Step 1: Check os module usage
os.cpus is a function, so os.cpus.length is undefined and causes error.
Step 2: Correct usage
Use os.cpus().length to get the number of CPU cores correctly.
Final Answer:
os.cpus.length is undefined; should be os.cpus().length -> Option D
Quick Check:
os.cpus() is function, need parentheses [OK]
Hint: Remember os.cpus() is a function, not a property [OK]
Common Mistakes:
Forgetting parentheses on os.cpus()
Assuming cluster.fork() is missing
Thinking else block is required for syntax
5. You want to create a Node.js server that forks one worker per CPU core and restarts any worker if it crashes. Which code snippet correctly implements this behavior?
hard
A. const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isPrimary) {
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from worker ' + process.pid);
}).listen(8000);
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.process.pid} died`);
});
}
B. const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isWorker) {
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from worker ' + process.pid);
}).listen(8000);
}
C. const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isPrimary) {
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.process.pid} died, restarting...`);
cluster.fork();
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from worker ' + process.pid);
}).listen(8000);
}
D. const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isPrimary) {
cluster.fork();
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from worker ' + process.pid);
}).listen(8000);
}
Solution
Step 1: Fork one worker per CPU core in primary process
In if (cluster.isPrimary), use const numCPUs = os.cpus().length; for (let i = 0; i < numCPUs; i++) cluster.fork();