Performance: Receiving results from workers
This affects how quickly the main thread can process results from worker threads, impacting interaction responsiveness and overall throughput.
Jump into concepts and practice - no test required
const { Worker } = require('worker_threads');
const results = [];
let completed = 0;
function handleResult(result) {
results.push(result);
completed++;
if (completed === 5) {
console.log('All results:', results);
}
}
for (let i = 0; i < 5; i++) {
const worker = new Worker('./worker.js');
worker.once('message', handleResult);
worker.once('error', (err) => console.error(err));
}const { Worker } = require('worker_threads');
const results = [];
for (let i = 0; i < 5; i++) {
const worker = new Worker('./worker.js');
worker.on('message', (result) => {
results.push(result);
if (results.length === 5) {
console.log('All results:', results);
}
});
worker.on('error', (err) => console.error(err));
}| Pattern | Event Loop Impact | Memory Usage | Main Thread Blocking | Verdict |
|---|---|---|---|---|
| Multiple persistent listeners with frequent messages | High event loop churn | Potential memory spikes | Possible blocking if processing is heavy | [X] Bad |
| Single-use listeners with controlled message handling | Minimal event loop overhead | Stable memory usage | Non-blocking with async processing | [OK] Good |
message event on the worker to receive data.message event on the worker -> Option Con method to listen for events.message, and the syntax is worker.on('message', callback).const { Worker } = require('worker_threads');
const worker = new Worker(`
const { parentPort } = require('worker_threads');
parentPort.postMessage('Hello from worker');
`, { eval: true });
worker.on('message', (msg) => console.log(msg));parentPort.postMessage.message event and logs the received message.const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js');
worker.on('message', (data) => {
console.log('Received:', data);
});
parentPort.postMessage('start');postMessage is called on parentPort inside the worker, not on the worker instance in main thread.worker.postMessage() to send messages to the worker, but inside the worker, parentPort.postMessage() sends messages back.const { Worker } = require('worker_threads');
const worker = new Worker('./worker.js');
// What should you do here to receive all messages?worker.on('message') listens continuously for all messages sent by the worker.once listens only once, loops or polling are unnecessary and inefficient for receiving messages.