Bird
Raised Fist0
Node.jsframework~20 mins

Worker thread vs child process 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 Parallelism Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Difference in memory sharing between worker threads and child processes
In Node.js, what is the main difference in how worker threads and child processes handle memory?
AWorker threads share the same memory space, while child processes have separate memory spaces.
BChild processes share the same memory space, while worker threads have separate memory spaces.
CBoth worker threads and child processes share the same memory space.
DNeither worker threads nor child processes share memory; both use separate memory spaces.
Attempts:
2 left
💡 Hint
Think about how threads and processes work in general operating system terms.
component_behavior
intermediate
2:00remaining
Output behavior of worker thread vs child process
Consider this Node.js code snippet that creates a worker thread and a child process, both printing a message. What will be the order of outputs in the console?
Node.js
const { Worker } = require('worker_threads');
const { fork } = require('child_process');

console.log('Main start');

const worker = new Worker(`
  const { parentPort } = require('worker_threads');
  parentPort.postMessage('Worker done');
`, { eval: true });

const child = fork('./child.js');

worker.on('message', msg => console.log(msg));
child.on('message', msg => console.log(msg));

console.log('Main end');
A
Main start
Main end
Child done
Worker done
B
Main start
Worker done
Main end
Child done
C
Main start
Main end
Worker done
Child done
D
Worker done
Child done
Main start
Main end
Attempts:
2 left
💡 Hint
Remember that worker threads and child processes run asynchronously, but main thread logs synchronously.
🔧 Debug
advanced
2:00remaining
Identify the error in child process communication
This Node.js code tries to send a message from the parent to the child process. What error will occur when running this code?
Node.js
const { fork } = require('child_process');

const child = fork('child.js');

child.send('Hello parent');

// child.js content:
// process.on('message', msg => {
//   console.log('Message from parent:', msg);
// });
AError: The child process cannot send messages without a listener in the parent.
BTypeError: child.send is not a function.
CError: The child process file path is incorrect or missing.
DNo error; the message is sent successfully to the child process.
Attempts:
2 left
💡 Hint
Check if the parent is sending a message to the child process correctly.
📝 Syntax
advanced
2:00remaining
Correct syntax to create a worker thread with inline code
Which option correctly creates a worker thread in Node.js using inline code with the 'eval' option?
Anew Worker(`console.log('Hello from worker');`, { eval: true });
Bnew Worker(`const { parentPort } = require('worker_threads'); parentPort.postMessage('Hi');`, { eval: true });
Cnew Worker('console.log("Hello from worker")', { eval: true });
Dnew Worker('const { parentPort } = require('worker_threads'); parentPort.postMessage('Hi');');
Attempts:
2 left
💡 Hint
Remember that inline worker code must be a string and use eval: true to run.
state_output
expert
2:00remaining
State sharing behavior between worker threads and child processes
Given this scenario: A variable 'count' is incremented inside a worker thread and separately inside a child process. After both finish, what are the final values of 'count' in the main thread?
Node.js
let count = 0;

// Worker thread increments count by 1
// Child process increments count by 1

// After both finish, what is count in main thread?
Acount is 0 because neither worker thread nor child process can change main thread variables directly.
Bcount is 1 because only the worker thread shares memory with main thread.
Ccount is undefined because the variable is not shared at all.
Dcount is 2 because both increments affect the same variable.
Attempts:
2 left
💡 Hint
Think about how memory is shared or isolated between main thread, worker threads, and child processes.

Practice

(1/5)
1. Which statement best describes the difference between worker threads and child processes in Node.js?
easy
A. Worker threads run in the same process sharing memory, while child processes run in separate processes with separate memory.
B. Worker threads run separate programs, child processes share the same memory space.
C. Both worker threads and child processes run in the same process and share memory.
D. Child processes run inside worker threads to improve performance.

Solution

  1. Step 1: Understand worker threads behavior

    Worker threads run JavaScript code in parallel but inside the same Node.js process and share memory.
  2. Step 2: Understand child processes behavior

    Child processes run completely separate programs with their own memory space and communicate via messages.
  3. Final Answer:

    Worker threads run in the same process sharing memory, while child processes run in separate processes with separate memory. -> Option A
  4. Quick Check:

    Worker threads share memory, child processes do not [OK]
Hint: Remember: threads share memory, processes do not [OK]
Common Mistakes:
  • Confusing memory sharing between threads and processes
  • Thinking child processes share memory
  • Assuming worker threads run separate programs
2. Which of the following is the correct way to create a worker thread in Node.js?
easy
A. const worker = spawn('worker.js');
B. const worker = fork('worker.js');
C. const worker = createThread('worker.js');
D. const worker = new Worker('worker.js');

Solution

  1. Step 1: Recall worker thread creation syntax

    Worker threads are created using the Worker class from the worker_threads module.
  2. Step 2: Identify correct constructor usage

    The correct syntax is new Worker('filename'). The fork and spawn methods are for child processes.
  3. Final Answer:

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

    Worker threads use new Worker() [OK]
Hint: Use new Worker() for threads, fork/spawn for processes [OK]
Common Mistakes:
  • Using fork() to create worker threads
  • Using spawn() for worker threads
  • Using non-existent createThread() function
3. Consider this Node.js code snippet using a child process:
const { fork } = require('child_process');
const child = fork('child.js');
child.on('message', msg => console.log('Parent got:', msg));
child.send('Hello');

What will the parent process output if child.js sends back { reply: 'Hi' } on receiving a message?
medium
A. Parent got: Hello
B. Parent got: { reply: 'Hi' }
C. Parent got: Hi
D. No output, error occurs

Solution

  1. Step 1: Understand child process communication

    The parent sends 'Hello' to the child. The child responds with an object { reply: 'Hi' } via process.send().
  2. Step 2: Analyze parent's message event handler

    The parent's child.on('message') receives the object and logs it as Parent got: { reply: 'Hi' }.
  3. Final Answer:

    Parent got: { reply: 'Hi' } -> Option B
  4. Quick Check:

    Child sends object, parent logs object [OK]
Hint: Child sends object, parent logs exact message [OK]
Common Mistakes:
  • Assuming string 'Hi' instead of object
  • Expecting parent's message to be 'Hello'
  • Confusing child and parent message directions
4. What is wrong with this code snippet that tries to create a worker thread?
const { Worker } = require('worker_threads');
const worker = Worker('worker.js');
medium
A. The file 'worker.js' must be a JSON file
B. Wrong module imported, should be 'child_process'
C. Missing new keyword before Worker constructor
D. Worker threads cannot be created with a filename

Solution

  1. Step 1: Check Worker thread creation syntax

    The Worker class must be instantiated with the new keyword.
  2. Step 2: Identify error in code

    The code calls Worker('worker.js') without new, causing a TypeError.
  3. Final Answer:

    Missing new keyword before Worker constructor -> Option C
  4. Quick Check:

    Use new Worker() to create threads [OK]
Hint: Always use new with Worker() constructor [OK]
Common Mistakes:
  • Forgetting new keyword
  • Importing wrong module for threads
  • Thinking worker.js must be JSON
5. You want to perform a CPU-heavy task in Node.js without blocking the main event loop. Which approach is best and why?
hard
A. Use a child process to run the task in a separate process communicating via messages.
B. Use a worker thread to run the task sharing memory with the main thread.
C. Run the task directly in the main thread asynchronously.
D. Use setTimeout to delay the task execution in the main thread.

Solution

  1. Step 1: Understand CPU-heavy task impact

    CPU-heavy tasks block the main event loop if run directly, causing app unresponsiveness.
  2. Step 2: Compare worker threads and child processes for heavy tasks

    Worker threads share memory but still run in the same process, which can cause contention. Child processes run in separate processes, isolating CPU load and preventing blocking.
  3. Step 3: Evaluate other options

    Running asynchronously in main thread or delaying with setTimeout does not prevent blocking for CPU-heavy tasks.
  4. Final Answer:

    Use a child process to run the task in a separate process communicating via messages. -> Option A
  5. Quick Check:

    Heavy CPU tasks best isolated in child processes [OK]
Hint: Heavy CPU tasks? Use child processes to avoid blocking [OK]
Common Mistakes:
  • Assuming worker threads fully isolate CPU load
  • Thinking async or setTimeout avoids CPU blocking
  • Ignoring message communication overhead