Najlepszy samouczek Node.js wieloprocesową W 2024 r. W tym samouczku możesz dowiedzieć się Metoda exec (),Metoda tarło (),metoda widelec,
Wszyscy wiemy, że node.js jest tryb jednowątkowy, ale jest używany do obsługi jednoczesnych zdarzeniami, które pomogą nam stworzyć wiele podprocesów w systemie multi-core CPU, który poprawia wydajność.
Każde dziecko jest zawsze z trzech obiektów przepływu: child.stdin, child.stdout i child.stderr. Mogą dzielić strumień stdio proces macierzysty, lub może być również sterowany niezależny obiekt strumienia.
Węzeł zapewnia child_process moduły do tworzenia procesu potomnego, poprzez:
Exec - proces potomny wykorzystanie Run child_process.execbufor wyjściowy procesu potomnego, a wyjście z procesu potomnego jest zwracany w postaci ciągu parametrów funkcji oddzwaniania.
tarło - child_process.spawn używając podanych parametrów wiersza polecenia, aby utworzyć nowy proces.
Widelec - child_process.fork jest tarło () specjalny formularz dla modułu działa u dziecka, takich jak widelcem ( "./ son.js ') odpowiada na tarło (" węzłów "[" ./son.js " ]).Różnica polega metoda tarło, widelec między procesem rodzicem a dzieckiem, ustalić kanał komunikacji do komunikacji między procesami.
Proces potomny wykorzystanie Run child_process.exec bufor wyjściowy procesu potomnego, a wyjście z procesu potomnego jest zwracany w postaci ciągu parametrów funkcji oddzwaniania.
Składnia jest następująca:
child_process.exec(command[, options], callback)
Parametry są następujące:
Polecenie: String, polecenie do uruchomienia, parametry oddzielone spacjami
Opcje: obiekty mogą być:
/bin/sh
, jak w systemie Windows cmd.exe
, Shell powinien być w stanie zidentyfikować -c
przełącznika w UNIX-ie lub /s /c
w systemie Windows. w systemie Windows, linia parsowanie polecenia być zgodne cmd.exe
) callback: funkcja zwrotna ma trzy argumenty błędu, stdout i stderr.
exec () zwraca maksymalną bufor, i czekać na zakończenie procesu, jednorazowa przywrócić zawartość bufora.
Stwórzmy dwie js pliki support.js i master.js.
support.js kod pliku:
console.log("进程 " + process.argv[2] + " 执行。" );
master.js kod pliku:
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); }); }
Realizacja powyższego kodu, wyjście jest:
$ node master.js 子进程已退出,退出码 0 stdout: 进程 1 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 0 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 2 执行。 stderr:
child_process.spawn używając podanych parametrów wiersza polecenia, aby utworzyć nowy proces, składnia jest następująca:
child_process.spawn(command[, args][, options])
Parametry są następujące:
Polecenie: Polecenie do uruchomienia
args: parametr ciąg Array
Opis obiektu
Metoda tarło () zwraca strumień (stdout i stderr) stosowany w procesie powrotu dużych ilości danych. Gdy proces rozpoczyna się, gdy grzybnia () zaczął otrzymywać odpowiedzi.
Stwórzmy dwie js pliki support.js i master.js.
support.js kod pliku:
console.log("进程 " + process.argv[2] + " 执行。" );
master.js kod pliku:
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); }); }
Realizacja powyższego kodu, wyjście jest:
$ node master.js stdout: 进程 0 执行。 子进程已退出,退出码 0 stdout: 进程 1 执行。 子进程已退出,退出码 0 stdout: 进程 2 执行。 子进程已退出,退出码 0
child_process.fork jest specjalną formą ikry () metoda tworzenia procesów, składnia jest następująca:
child_process.fork(modulePath[, args][, options])
Parametry są następujące:
ModulePath: String, należy uruchomić w module procesu potomnego
args: parametr ciąg Array
Opcje: Przedmiot
true
, dziecka stdin
, stdout
i stderr
będzie powiązana z procesu macierzystego, w przeciwnym razie będą one dziedziczone z procesu macierzystego. (Domyślnie: false
) Zwrócona przedmiotem oprócz wszystkich metodach stosuje się wystąpienie ChildProcess, jest wbudowany w kanał komunikacyjny.
h3> PrzykładyStwórzmy dwie js pliki support.js i master.js.
support.js kod pliku:
console.log("进程 " + process.argv[2] + " 执行。" );
master.js kod pliku:
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); }); }
Realizacja powyższego kodu, wyjście jest:
$ node master.js 进程 0 执行。 子进程已退出,退出码 0 进程 1 执行。 子进程已退出,退出码 0 进程 2 执行。 子进程已退出,退出码 0