2011-09-01 11 views
6

Estoy usando este script de nodo como un "corredor" para mi proyecto (necesito iniciar/detener tres scripts al mismo tiempo). Ahora me pregunto si el engendro de child_process dentro de un proceso de nodo utilizará o no múltiples núcleos que mi servidor tendría (estoy seguro 90% en un SÍ, pero es mejor prevenir que lamentar).NodeJS: ¿este código se ejecutará multi-core o no?


    var CP = require("child_process") 
     , children = [ 'server1', 'server2', 'server3' ] 
     , child 

    children.forEach(function(name) { 

     child = CP.spawn("node", [name]) 

     child.stdout.on('data', function (data) { 
     process.stdout.write(data.toString()); 
     }) 

     child.stderr.on('data', function (data) { 
     process.stdout.write(data.toString()); 
     }) 
    } 
    }); 

OS es Ubuntu Linux.

Respuesta

7

Yup. spawn() crea procesos completamente nuevos en el nivel del sistema operativo.

Y que incluso podría simplificarlo un poco mediante el uso de pipe():.

var spawn = require("child_process").spawn 
    , children = [ 'server1', 'server2', 'server3' ] 
    , child 

children.forEach(function(name) { 
    child = spawn("node", [name]) 

    child.stdout.pipe(process.stdout); 
    child.stderr.pipe(process.stderr); 

    // Catch errors (dies quite hard on first child with non-zero exit code...) 
    child.on('exit', function (code) { 
    if(code !== 0) { 
     process.exit(code); 
    } 
    }); 
}); 

(oyente También se ha añadido en exit, lo que va a al menos propagar errores de alguna manera Si es algo que quieres hacer, Es posible que desee realizar un seguimiento de ellos hasta que el último proceso haya finalizado, y luego llamar al process.exit() con el código más grande o más pequeño ...)

+0

¡Gracias por la pista, Morten! :) [Tengo el controlador de salida también, eliminado solo para ahorrar espacio en la Q] – Claudio

0

Esto utilizará completamente varios núcleos. El nodo no vinculará, y nunca debería, un proceso secundario con un núcleo de CPU o CPU específico.

Cuestiones relacionadas