Open In App

How to handle Child Threads in Node.js ?

Last Updated : 10 Sep, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Node.js is a single-threaded language and uses the multiple threads in the background for certain tasks as I/O calls but it does not expose child threads to the developer.
But node.js gives us ways to work around if we really need to do some work parallelly to our main single thread process.
Child Process in Node: The child_process module gives the node the ability to run the child process by accessing operating system commands.
Example: Filename: parallelProcess.js 
 

javascript




// Do any work in parallel to main
// event loop or main process
console.log('Child Process Starts')
setTimeout(() => {
    console.log('Data processed')
}, 5000)


Filename: main.js 
 

javascript




const { fork } = require('child_process');
  
// Fork another process
const child_process = fork('./parallelProcess.js');
 
// Data we may need to send to the child process
const data = {}
 
console.log('Before process')
 
// Send the data to forked process
child_process.send({ data }, function(){
    console.log('Sending data')
});
 
// Listen to forked process
child_process.on('close', (result) => {
    console.log('Child process terminated and returned');
});
 
console.log('After process')


Output: 
 

Before process
After process
Child Process Starts
Data processed
Child process terminated and returned

Worker Threads The worker_threads module enables the use of threads that execute JavaScript in parallel. Worker’s threads are useful for performing CPU-intensive JavaScript operations. They will not help much with I/O-intensive work which can be done better using Node.js built-in asynchronous I/O operations.
Example: 
 

javascript




const {Worker, isMainThread, parentPort}
            = require('worker_threads');
 
if (isMainThread) {
 
    // Main code, only executed for main thread
    const worker = new Worker(__filename, {
        workerData: {}
    });
 
    worker.on('message', (m) => console.log(
                  'Thread send message:', m));
 
    worker.on('error', () => console.log('Error'));
    worker.on('exit', () => {
        console.log('Worker exit')
    });
} else {
 
    // Worker thread code, only execute
    // for working thread.
    setTimeout(() => {
        parentPort.postMessage('Hello World!');
    }, 3000)
}


Output: 
 

Thread send message: Hello World!
Worker exit

The process has its own memory space on other hand, threads use the shared memory space. Thread is part of the process. Since worker_threads make new threads inside the same process it requires fewer resources.
Reference: 
https://nodejs.org/api/child_process.html 
https://nodejs.org/api/worker_threads.html
 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads