Il miglior tutorial Node.js multi-processo Nel 2024, in questo tutorial puoi imparare il metodo exec (),Metodo di spawn (),metodo forchetta,
Sappiamo tutti che Node.js è la modalità single-threaded, ma viene utilizzato per gestire concomitante event-driven, che ci aiuterà a creare più sotto-processi sul sistema CPU multi-core, che migliora le prestazioni.
Ogni bambino è sempre con tre oggetti di flusso: child.stdin, child.stdout e child.stderr. Essi possono condividere il processo padre flusso stdio, o può anche essere guidato oggetto flusso indipendente.
Nodo fornisce moduli child_process per creare un processo figlio, da:
exec - child_process.exec processo figlio uso Run, il buffer di output processo figlio, e l'uscita del processo figlio viene restituito sotto forma di un parametri di funzione di callback.
deporre le uova - child_process.spawn utilizzando i parametri della riga di comando specificati per creare un nuovo processo.
fork - child_process.fork si depongono le uova () forma speciale per il modulo in esecuzione nel bambino, come fork ( './ son.js') corrisponde a deporre le uova ( 'nodo', [ ' ./son.js' ]).La differenza è il metodo uova, forchetta tra il processo padre e figlio, stabilire un canale di comunicazione per la comunicazione tra processi.
child_process.exec processo figlio uso Run, il buffer di output processo figlio, e l'uscita del processo figlio viene restituito sotto forma di un parametri di funzione di callback.
La sintassi è la seguente:
child_process.exec(command[, options], callback)
I parametri sono i seguenti:
command: String, il comando da eseguire, i parametri separati da spazi
Opzioni: oggetti possono essere:
/bin/sh
, come in Windows cmd.exe
, Shell dovrebbe essere in grado di identificare il -c
interruttore in UNIX, o /s /c
in Windows. in Windows, la riga di comando parsing compatibile cmd.exe
) callback: funzione di callback ha tre argomenti errore, stdout e stderr.
exec () restituisce il buffer massima, e attendere la fine del processo, una sola volta restituire il contenuto del buffer.
Creiamo due file JS support.js e master.js.
codice del file support.js:
console.log("进程 " + process.argv[2] + " 执行。" );
codice del file master.js:
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.exec('node support.js '+i, function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('子进程已退出,退出码 '+code); }); }
L'attuazione del codice di cui sopra, l'output è:
$ node master.js 子进程已退出,退出码 0 stdout: 进程 1 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 0 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 2 执行。 stderr:
child_process.spawn utilizzando i parametri della riga di comando specificati per creare un nuovo processo, la sintassi è la seguente:
child_process.spawn(command[, args][, options])
I parametri sono i seguenti:
comando: il comando da eseguire
args: matrice di parametri di stringa Array
opzioni oggetto
Metodo spawn () restituisce lo stream (stdout e stderr), utilizzato nel processo di restituire grandi quantità di dati. Una volta che il processo avviato quando il micelio () ha iniziato a ricevere una risposta.
Creiamo due file JS support.js e master.js.
codice del file support.js:
console.log("进程 " + process.argv[2] + " 执行。" );
codice del file master.js:
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.spawn('node', ['support.js', i]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('子进程已退出,退出码 '+code); }); }
L'attuazione del codice di cui sopra, l'output è:
$ node master.js stdout: 进程 0 执行。 子进程已退出,退出码 0 stdout: 进程 1 执行。 子进程已退出,退出码 0 stdout: 进程 2 执行。 子进程已退出,退出码 0
child_process.fork è una speciale forma di micelio () metodo per creare processi, sintassi è la seguente:
child_process.fork(modulePath[, args][, options])
I parametri sono i seguenti:
ModulePath: String, da eseguire in un modulo processo figlio
args: matrice di parametri di stringa Array
Opzioni: Object
true
, del bambino stdin
, stdout
e stderr
sarà collegata al processo padre, in caso contrario, saranno ereditati dal processo genitore. (Default: false
) L'oggetto restituito in aggiunta a tutti i metodi hanno esempio processo figlio, vi è un canale di comunicazione integrato.
h3> EsempiCreiamo due file JS support.js e master.js.
codice del file support.js:
console.log("进程 " + process.argv[2] + " 执行。" );
codice del file master.js:
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var worker_process = child_process.fork("support.js", [i]); worker_process.on('close', function (code) { console.log('子进程已退出,退出码 ' + code); }); }
L'attuazione del codice di cui sopra, l'output è:
$ node master.js 进程 0 执行。 子进程已退出,退出码 0 进程 1 执行。 子进程已退出,退出码 0 进程 2 执行。 子进程已退出,退出码 0