¿Cómo manejar subprocesos secundarios en Node.js?

Node.js es un lenguaje de subproceso único y utiliza varios subprocesos en segundo plano para ciertas tareas como llamadas de E/S, pero no expone los subprocesos secundarios al desarrollador.
Pero node.js nos brinda formas de trabajar si realmente necesitamos hacer algún trabajo en paralelo a nuestro proceso principal de subproceso único.
Proceso secundario en el Node: el módulo child_process le da al Node la capacidad de ejecutar el proceso secundario accediendo a los comandos del sistema operativo.
Ejemplo: Nombre de archivo: paraleloProcess.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)

Nombre de archivo: principal.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')

Producción: 
 

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

Subprocesos de trabajo El módulo worker_threads permite el uso de subprocesos que ejecutan JavaScript en paralelo. Los subprocesos de trabajo son útiles para realizar operaciones de JavaScript con uso intensivo de la CPU. No ayudarán mucho con el trabajo intensivo de E/S que se puede hacer mejor usando las operaciones de E/S asincrónicas integradas de Node.js.
Ejemplo: 
 

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)
}

Producción: 
 

Thread send message: Hello World!
Worker exit

El proceso tiene su propio espacio de memoria, por otro lado, los hilos usan el espacio de memoria compartida. El hilo es parte del proceso. Dado que los hilos de los trabajadores crean nuevos hilos dentro del mismo proceso, requiere menos recursos.
Referencia:  
https://nodejs.org/api/child_process.html  
https://nodejs.org/api/worker_threads.html
 

Publicación traducida automáticamente

Artículo escrito por bjindal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *