Latest web development tutorials

멀티 프로세스를 Node.js를

우리 모두는 Node.js를 단일 스레드 모드 것을 알고 있지만, 처리하는 데 사용되는 동시 이벤트 중심, 우리가 성능을 향상 멀티 코어 CPU 시스템에 여러 하위 프로세스를 만드는 데 도움이됩니다.

child.stdin, child.stdout 및 child.stderr 각 아이는 세 가지 흐름 객체에 항상이다. 이들은 표준 입출력 스트림 부모 프로세스를 공유 할 수도 있고, 또한 독립적 인 스트림 오브젝트를 조향 할 수있다.

노드에 의해, 자식 프로세스를 만들 수 child_process 모듈을 제공합니다 :

  • 간부 - child_process.exec 사용 런 하위 프로세스의 자식 프로세스의 출력 버퍼 및 자식 프로세스의 출력은 콜백 함수의 매개 변수의 형태로 복귀된다.

  • 산란 - child_process.spawn 새로운 프로세스를 만들기 위해 지정된 명령 줄 매개 변수를 사용하여.

  • 포크 - child_process.fork는 ( '노드', [ '스폰 대응 등 포크 ('./ son.js ')로 아이에서 실행되는 모듈 () 특수 형태, 산란되어 ./son.js을' ]).차이는 부모 및 자식 프로세스 사이에 포크 프로세스 간 통신을위한 통신 도관을 설정 스폰 방법이다.


간부 () 메소드

child_process.exec 사용 런 자식 프로세스가 자식 프로세스의 출력 버퍼 및 자식 프로세스의 출력은 콜백 함수의 매개 변수의 형태로 복귀된다.

구문은 다음과 같습니다

child_process.exec(command[, options], callback)

매개 변수

다음과 같이 매개 변수는 다음과 같습니다

명령 문자열, 실행할 명령, 공백으로 구분 매개 변수

옵션 : 객체가 될 수 있습니다 :

  • 현재 작업 디렉토리 CWD, 문자열, 자식 프로세스
  • ENV, 주요 환경 변수의 목적
  • 인코딩, 문자열, 문자 인코딩 (기본값 : 'UTF8')
  • 쉘, 문자열, 명령 셸을 (실행하기위한 기본 : UNIX가에 /bin/sh , 윈도우에서와 같이 cmd.exe , 셸을 식별 할 수 있어야한다 -c UNIX에 스위치를, 또는 /s /c 윈도우입니다. Windows에서 명령 줄 구문 분석이 호환 cmd.exe )
  • 시간 제한, 디지털, 제한 시간 (기본값 : 0)
  • 아이가 넘어 죽을 것이다, 그래서 만약 maxBuffer는, 디지털, 표준 출력 또는 표준 오류의 최대 버퍼 (이진)이 존재하도록 허용 (기본값 : 1024 * 200)
  • killSignal, 문자열 종료 신호 (기본 : 'SIGTERM')
  • UID는 디지털 프로세스의 사용자 ID를 설정
  • GID, 디지털, 설정 프로세스 그룹 ID

콜백 : 콜백 함수는 세 개의 인수 오류, 표준 출력 및 표준 오류가 있습니다.

간부 () 메소드는 최대 버퍼를 리턴하고, 처리의 종료를 기다릴 일회성 버퍼의 내용을 반환한다.

의 두 JS 파일 support.js 및 master.js을 만들 수 있습니다.

support.js 파일 코드 :

console.log("进程 " + process.argv[2] + " 执行。" );

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);
   });
}

위의 코드의 구현, 출력은 :

$ node master.js 
子进程已退出,退出码 0
stdout: 进程 1 执行。

stderr: 
子进程已退出,退出码 0
stdout: 进程 0 执行。

stderr: 
子进程已退出,退出码 0
stdout: 进程 2 执行。

stderr: 

스폰 () 메소드

새로운 프로세스를 생성하기 위해 지정된 명령 줄 매개 변수를 사용하여 child_process.spawn 다음과 같이 구문은 다음과 같습니다

child_process.spawn(command[, args][, options])

매개 변수

다음과 같이 매개 변수는 다음과 같습니다

명령을 실행하는 명령

인수 : 배열 문자열 매개 변수의 배열

옵션 개체

  • 자식 프로세스의 CWD 문자열 현재 작업 디렉토리
  • ENV 개체 환경 변수 키 - 값 쌍
  • STDIO 배열 | stdio를 구성 문자열 서브 프로세스
  • 분리 된 부울이 아이가 프로세스 그룹의 리더가 될 것입니다
  • 프로세스의 사용자 ID를 설정하는 UID 번호
  • GID 번호 설정 프로세스 그룹 ID

스폰 () 방법은 많은 양의 데이터를 반환하는 과정에서 사용되는 스트림 (표준 출력 및 열려진)를 반환한다. 스폰 ()가 응답을 수신 할 때 시작하는 프로세스가 시작되면.

의 두 JS 파일 support.js 및 master.js을 만들 수 있습니다.

support.js 파일 코드 :

console.log("进程 " + process.argv[2] + " 执行。" );

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);
   });
}

위의 코드의 구현, 출력은 :

$ node master.js stdout: 进程 0 执行。

子进程已退出,退出码 0
stdout: 进程 1 执行。

子进程已退出,退出码 0
stdout: 进程 2 执行。

子进程已退出,退出码 0

포크 방법

child_process.fork 다음과 같이 구문은, 산란 () 프로세스를 생성하기위한 방법의 특별한 형태이다 :

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

매개 변수

다음과 같이 매개 변수는 다음과 같습니다

modulePath : 문자열, 자식 프로세스 모듈에서 실행되는

인수 : 배열 문자열 매개 변수의 배열

옵션 : 개체

  • 자식 프로세스의 CWD 문자열 현재 작업 디렉토리
  • ENV 개체 환경 변수 키 - 값 쌍
  • execPath 문자열은 실행 파일의 자식 프로세스를 생성
  • 문자열 매개 변수 배열 execArgv 배열 자녀의 실행 파일 (기본값 : process.execArgv)
  • 자동 부울 경우 true , 아이의 stdin , stdoutstderr 부모 프로세스에 연결됩니다 그렇지 않으면, 그들은 부모 프로세스에서 상속됩니다. (기본값 : false )
  • 프로세스의 사용자 ID를 설정하는 UID 번호
  • GID 번호 설정 프로세스 그룹 ID

모든 메소드에 추가하여 반환 된 객체가 ChildProcess 인스턴스를, 내장 된 통신 채널이있다.

H3> 예

의 두 JS 파일 support.js 및 master.js을 만들 수 있습니다.

support.js 파일 코드 :

console.log("进程 " + process.argv[2] + " 执行。" );

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);
   });
}

위의 코드의 구현, 출력은 :

$ node master.js 
进程 0 执行。
子进程已退出,退出码 0
进程 1 执行。
子进程已退出,退出码 0
进程 2 执行。
子进程已退出,退出码 0