/ / NodeJS: questo codice eseguirà multi-core o no? - node.js

NodeJS: questo codice eseguirà multi-core o no? - node.js

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 № 1

Sì. 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.