멀티 프로세스를 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
,stdout
및stderr
부모 프로세스에 연결됩니다 그렇지 않으면, 그들은 부모 프로세스에서 상속됩니다. (기본값 :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