Sto usando questo script del nodo come "runner" per il mioprogetto (è necessario avviare / arrestare tre script contemporaneamente). Ora mi chiedo se la spawn di child_process dall'interno di un processo di nodo non utilizzerà o non userà multi core che il mio server avrebbe (sono fiducioso al 90% su un SI, ma più sicuro che dispiaciuto).
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());
})
}
});
Il sistema operativo è Ubuntu Linux.
risposte:
7 per risposta № 1Sì. spawn()
crea processi completamente nuovi a livello di sistema operativo.
E potresti anche semplificarlo un po 'usando 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);
}
});
});
(Anche aggiunto listener su exit
, quindi almeno propagherà gli errori in qualche modo. Se è qualcosa che vuoi fare, ti consigliamo di tenerne traccia fino al termine dell'ultimo processo, quindi chiamare process.exit()
con il codice più grande o più piccolo ...)
0 per risposta № 2
Questo utilizzerà assolutamente più core. Il nodo non vincerà, e non dovrebbe mai, associare un processo figlio a una specifica CPU o core della CPU.