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 main way to send data to a worker thread in Node.js?
You send data to a worker thread by passing it as an argument when creating the Worker or by using the postMessage() method to send messages after the worker starts.
Click to reveal answer
beginner
How does the worker thread receive data sent from the main thread?
The worker thread listens for messages using the parentPort.on('message', callback) event handler to receive data sent from the main thread.
Click to reveal answer
intermediate
Can you pass complex objects like functions or class instances directly to a worker thread?
No, you cannot pass functions or class instances directly. Only data that can be serialized (like objects, arrays, strings, numbers) can be passed between threads.
Click to reveal answer
beginner
What is the benefit of using workerData when creating a new Worker?
workerData allows you to send initial data to the worker thread at creation time, so the worker can start working immediately with that data.
Click to reveal answer
beginner
How do you send data back from a worker thread to the main thread?
The worker thread uses parentPort.postMessage() to send data back to the main thread, which listens with worker.on('message').
Click to reveal answer
Which method sends data from the main thread to a worker after it has started?
AemitMessage()
BworkerData
CsendData()
DpostMessage()
✗ Incorrect
The postMessage() method sends data to a worker after it has started. workerData is only for initial data.
Where does a worker thread listen for incoming messages from the main thread?
AparentPort.on('message')
Bworker.on('message')
Cprocess.on('message')
DmainThread.on('message')
✗ Incorrect
The worker thread listens on parentPort.on('message') to receive messages from the main thread.
What kind of data can be passed between the main thread and worker threads?
AOpen file handles
BFunctions and class instances
COnly serializable data like objects, arrays, strings, and numbers
DDOM elements
✗ Incorrect
Only serializable data such as objects, arrays, strings, and numbers can be passed between threads.
How do you pass initial data to a worker thread when creating it?
AUsing the workerData option in the Worker constructor
BUsing postMessage() immediately after creation
CUsing environment variables
DUsing a global variable
✗ Incorrect
Initial data is passed to a worker thread via the workerData option in the Worker constructor.
How does the main thread receive data sent from a worker thread?
AparentPort.on('message')
Bworker.on('message')
Cworker.postMessage()
Dprocess.on('message')
✗ Incorrect
The main thread listens for messages from a worker using worker.on('message').
Explain how data is passed from the main thread to a worker thread and how the worker receives it.
Think about the two ways to send data: at creation and after creation.
You got /3 concepts.
Describe the limitations on the types of data you can pass between the main thread and worker threads in Node.js.
Consider what can be converted to a message safely.
You got /3 concepts.
Practice
(1/5)
1. In Node.js, how do you pass initial data to a worker thread when creating it?
easy
A. By using the workerData option in the Worker constructor
B. By sending a message after the worker starts
C. By setting a global variable inside the worker file
D. By importing a module inside the worker
Solution
Step 1: Understand worker creation
When creating a worker thread, you can pass data directly using the workerData option in the Worker constructor.
Step 2: Recognize data passing method
This method allows the worker to access the data immediately via the imported workerData from 'worker_threads'.
Final Answer:
By using the workerData option in the Worker constructor -> Option A
Quick Check:
Initial data to worker = workerData option [OK]
Hint: Pass data at creation with workerData option [OK]
Common Mistakes:
Trying to set global variables inside the worker
Sending data only after worker starts
Using imports to pass data
2. Which of the following is the correct syntax to create a worker and pass data to it?
easy
A. new Worker('worker.js', { workerData: { value: 10 } })
B. new Worker('worker.js', { message: { value: 10 } })
C. new Worker('worker.js', { initialData: { value: 10 } })
D. new Worker('worker.js', { data: { value: 10 } })
Solution
Step 1: Recall Worker constructor options
The correct option to pass data when creating a worker is workerData.
Step 2: Match syntax with correct option
Only new Worker('worker.js', { workerData: { value: 10 } }) uses workerData correctly; others use invalid keys.
Final Answer:
new Worker('worker.js', { workerData: { value: 10 } }) -> Option A
Quick Check:
Correct option key = workerData [OK]
Hint: Use workerData option exactly in Worker constructor [OK]
Common Mistakes:
Using incorrect option names like data or initialData
Confusing message passing with initial data passing
Assuming worker.js expects workerData to be an object with a value property.
medium
A. Worker file path is incorrect
B. Missing event listener for 'error'
C. postMessage is missing in main thread
D. workerData should be an object, not a number
Solution
Step 1: Check workerData type
The worker expects workerData as an object with a value property, but a number 123 is passed.
Step 2: Identify mismatch impact
This mismatch can cause errors or undefined behavior inside the worker when accessing workerData.value.
Final Answer:
workerData should be an object, not a number -> Option D
Quick Check:
workerData type must match expected structure [OK]
Hint: Pass workerData as expected object type [OK]
Common Mistakes:
Passing primitive instead of object
Ignoring workerData structure requirements
Not handling errors from wrong data
5. You want to create a worker that receives an array of numbers as workerData.numbers, doubles each number, and sends back the new array. Which main thread code correctly passes data and listens for the result?
hard
A. const worker = new Worker('./worker.js', { workerData: [1,2,3] });
worker.on('message', (result) => console.log(result));
B. const worker = new Worker('./worker.js', { data: [1,2,3] });
worker.on('message', (result) => console.log(result));
C. const worker = new Worker('./worker.js', { workerData: { numbers: [1,2,3] } });
worker.on('message', (result) => console.log(result));
D. const worker = new Worker('./worker.js');
worker.postMessage([1,2,3]);
worker.on('message', (result) => console.log(result));
Solution
Step 1: Verify the correct workerData structure
The worker accesses the array as workerData.numbers, so only code passing { workerData: { numbers: [1,2,3] } } works correctly.
Step 2: Confirm result handling
The correct code includes worker.on('message', (result) => console.log(result)) to log the doubled array sent back by the worker.
Final Answer:
const worker = new Worker('./worker.js', { workerData: { numbers: [1,2,3] } });
worker.on('message', (result) => console.log(result)); -> Option C
Quick Check:
Pass array inside object via workerData and listen for message [OK]
Hint: Wrap array in object for workerData and listen to message [OK]