node.js 를 이용 하여 하위 프로 세 스 를 만 드 는 방법 에 대한 자세 한 설명
4901 단어 node.js하위 프로 세 스 만 들 기
node 자 체 는 단일 프로 세 스 이 고 구동 모드 를 사용 하여 병행 합 니 다.단일 프로 세 스 가 다 핵 cpu 에서 의 자원 낭 비 를 해결 하기 위해 node 는 cluster 와 child 를 제공 합 니 다.process 모듈 은 여러 개의 키 프로 세 스 를 만 듭 니 다.
Node.js 는 단일 스 레 드 입 니 다.현재 보편적으로 다 중 프로세서 인 기계 에 대한 낭비 입 니 다.어떻게 이용 할 수 있 습 니까?그래서 childprocess 모듈 이 나 타 났 습 니 다.child_process 모듈 은 다른 프로 세 스에 서 생 성 되 고 파생 되 며 작업 을 수행 할 수 있 습 니 다.
child_process 모듈 은 부모 프로 세 스에 서 하위 프로 세 스에 접근 하 는 표현 형식 으로 ChildProcess 의 새로운 종 류 를 제공 합 니 다.Process 모듈 도 ChildProcess 대상 이다.부모 모듈 에서 process 를 방문 할 때 부모 ChildProcess 대상 입 니 다.하위 프로 세 스에 서 Process 를 방문 하면 ChildProcess 대상 입 니 다.
한 대상 을 이해 하 는 것 은 사건,방법,속성 밖 에 없다.ChildProcess 도 마찬가지다.
모든 하위 프로 세 스 는 세 개의 흐름 대상 을 가지 고 있 습 니 다:child.stdin,child.stdout,child.stderr.그들 은 부모 프로 세 스 의 stdio 흐름 을 공유 할 수 있 습 니 다.
여기 서 child 를 이용 한process 모듈 에서 exec,spawn,fork 세 가지 방법 으로 하위 프로 세 스 를 조작 합 니 다.
node-childProcess 파일 을 만 들 고 node-childPro.js 파일 을 만 듭 니 다.
그 중 한 줄 의 코드 는 다음 과 같다.
console.log(" " + process.argv[2] + " 。" );
// process.argv
//console.log(" " + process.argv + " 。" );
exec()방법node-childProcess 파일 에 node-childPro-exec.js 파일 을 새로 만 들 었 습 니 다.코드 는 다음 과 같 습 니 다.
const fs = require('fs');
const child_process = require('child_process');
for (var i = 0; i < 3; i++) {
// 。 node node-childPro.js i 。 node-childPro.js process.argv
var childProcess = child_process.exec('node node-childPro.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);
});
childProcess.on('exit', function (code) {
console.log(' , ' + code);
});
}
터미널 실행 코드 결 과 는 다음 과 같 습 니 다.
G:
ode
ode-childProcess> node node-childPro-exec.js
, 0
stdout: 0 。
stderr:
, 0
stdout: 1 。
stderr:
, 0
stdout: 2 。
stderr:
spawn()방법node-childProcess 파일 에 node-childPro-spawn.js 를 새로 만 들 었 습 니 다.코드 는 다음 과 같 습 니 다.
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var childProcess = child_process.spawn('node', ['node-childPro-spawn.js', i]);
childProcess.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
childProcess.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
childProcess.on('close', function (code) {
console.log(' , '+code);
});
}
터미널 실행 코드 결 과 는 다음 과 같 습 니 다.
G:
ode
ode-childProcess> node node-childPro-spawn.js
stdout: 0 。
, 0
stdout: 1 。
stdout: 2 。
, 0
, 0
fork()방법node-childProcess 파일 에 node-childPro-fork.js 를 새로 만 들 었 습 니 다.코드 는 다음 과 같 습 니 다.
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var childProcess = child_process.fork("node-childPro.js", [i]);
childProcess.on('close', function (code) {
console.log(' , ' + code);
});
}
터미널 실행 코드 결 과 는 다음 과 같 습 니 다.
G:
ode
ode-childProcess> node node-childPro-fork.js
0 。
1 。
, 0
2 。
, 0
, 0
exec,spawn,fork 에 대하 여1.exec 함 수 는 spawn 에 대한 우호 적 인 패키지 로 Shell 명령 해석 을 추가 하여 복잡 한 명령 을 직접 삽입 할 수 있 습 니 다.
2.exec 함수 캐 시 서브 프로 세 스 의 출력 을 하위 프로 세 스 의 출력 을 리 셋 함수 매개 변수 로 되 돌려 줍 니 다.
3.spawn 은 하위 스 레 드 가 실 행 된 후에 데 이 터 를 하위 프로 세 스에 서 주 프로 세 스 로 되 돌려 주기 시작 합 니 다.(응용 장면,예 를 들 어'시스템 모니터링')
4.spawn 은 콜백 함 수 를 지원 하지 않 습 니 다.스 트림 을 통 해 메 인 프로 세 스에 데 이 터 를 전송 하여 다 중 프로 세 스 간 의 데이터 교환 을 실현 합 니 다.
5.fork()는 spawn()의 특수 한 상황 으로 Node 프로 세 스 를 파생 시 키 는 데 사 용 됩 니 다.일반 ChildProcess 인 스 턴 스 가 가지 고 있 는 모든 방법 을 제외 하고 돌아 오 는 대상 은 내 장 된 통신 채널 도 가지 고 있다.
다운로드 주소:https://gitee.com/wangFengJ/node/tree/master/node-childProcess
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.