Najlepszy samouczek Node.js wieloprocesową W 2024 r. W tym samouczku możesz dowiedzieć się Metoda exec (),Metoda tarło (),metoda widelec,

Node.js wieloprocesową

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.


Metoda exec ()

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

Parametry są następujące:

Polecenie: String, polecenie do uruchomienia, parametry oddzielone spacjami

Opcje: obiekty mogą być:

  • Obecny CWD katalog roboczy, łańcuch, to proces potomny
  • env, przedmiot kluczowych zmiennych środowiskowych
  • kodowanie, string, kodowanie znaków (domyślnie: 'utf8')
  • shell, łańcuch, aby wykonać polecenie powłoki (domyślnie: na UNIX jest /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 )
  • Timeout, cyfrowy, czas oczekiwania (domyślnie: 0)
  • maxBuffer, cyfrowy, maksymalna bufor stdout lub stderr mogą istnieć (binarne), więc jeśli dziecko będzie zabity poza (domyślnie: 200 * 1024)
  • killSignal sygnał końca string (domyślnie: 'SIGTERM')
  • uid, cyfrowy, ustawić identyfikator użytkownika procesu
  • GID, cyfrowy, ustaw ID grupy procesów

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.

Przykłady

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: 

Metoda tarło ()

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

Parametry są następujące:

Polecenie: Polecenie do uruchomienia

args: parametr ciąg Array

Opis obiektu

  • Cwd String bieżący katalog roboczy procesu potomnego
  • env otoczenia obiektu par klucz-wartość zmiennej
  • stdio Array | podproces stdio konfiguracji String
  • wolnostojący Boolean To dziecko stanie się liderem grupy procesów
  • uid Ilość ustawić identyfikator użytkownika procesu
  • GID Numer ustawione ID grupy procesów

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.

Przykłady

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

metoda widelec

child_process.fork jest specjalną formą ikry () metoda tworzenia procesów, składnia jest następująca:

child_process.fork(modulePath[, args][, options])

parametry

Parametry są następujące:

ModulePath: String, należy uruchomić w module procesu potomnego

args: parametr ciąg Array

Opcje: Przedmiot

  • Cwd String bieżący katalog roboczy procesu potomnego
  • env otoczenia obiektu par klucz-wartość zmiennej
  • execPath String utworzyć procesu potomnego pliku wykonywalnego
  • tablicy parametrów String execArgv Array dziecka plik wykonywalny (domyślnie: process.execArgv)
  • Jeśli milczy Boolean 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 )
  • uid Ilość ustawić identyfikator użytkownika procesu
  • GID Numer ustawione ID grupy procesów

Zwrócona przedmiotem oprócz wszystkich metodach stosuje się wystąpienie ChildProcess, jest wbudowany w kanał komunikacyjny.

h3> Przykłady

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 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
Node.js wieloprocesową
10/30