node.js를 사용하여 하위 프로세스를 만드는 방법(자세한 튜토리얼)

亚连
풀어 주다: 2018-06-21 17:33:51
원래의
2738명이 탐색했습니다.

전에 멀티 프로세스에 대한 장을 읽었을 때 이에 대한 내용이 많다는 것을 알았습니다. 오늘 오후에 점심 시간에 일어나서 진정하면서 프로세스 모듈을 작성할 때도 언급했습니다. 주의 깊게 살펴보니 이해하기가 그리 어렵지 않다는 것을 알게 되었습니다. 그래서 다음 글에서는 node.js를 사용하여 자식 프로세스를 생성하는 방법에 대한 관련 정보를 주로 소개합니다. 필요한 친구들이 참고할 수 있습니다.

머리말

Node 자체는 단일 프로세스이며 동시성을 처리하기 위해 드라이버 모드를 사용합니다. 멀티 코어 CPU에서 단일 프로세스의 리소스 낭비를 해결하기 위해 노드는 클러스터 및 child_process 모듈을 제공합니다. 여러 하위 프로세스를 만듭니다.

Node.js는 단일 스레드이므로 다중 프로세서 시스템에서는 낭비됩니다. 어떻게 사용할 수 있나요? 그래서 child_process 모듈이 나타났습니다. child_process 모듈은 다른 프로세스에 대한 작업을 생성, 분기 및 수행할 수 있습니다.

child_process 모듈은 상위 프로세스에서 하위 프로세스에 액세스하는 표현으로 사용할 수 있는 새로운 클래스 ChildProcess를 제공합니다. Process 모듈은 ChildProcess 개체이기도 합니다. 상위 모듈에서 프로세스에 액세스하면 이는 상위 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(&#39;node node-childPro.js &#39;+i,
 // 回调函数 子进程的输出以回调函数参数的形式返回
 function (error, stdout, stderr) {
  if (error) {
  console.log(error.stack);
  console.log(&#39;Error code: &#39; + error.code);
  console.log(&#39;Signal received: &#39; + error.signal);
  }
  console.log(&#39;stdout: &#39; + stdout);
  console.log(&#39;stderr: &#39; + stderr);
 });
 childProcess.on(&#39;exit&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39; + code);
 });
}
로그인 후 복사

터미널 실행 코드 결과는 다음과 같습니다.

G:\node\node-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(&#39;fs&#39;);
const child_process = require(&#39;child_process&#39;);
 for(var i=0; i<3; i++) {
 var childProcess = child_process.spawn(&#39;node&#39;, [&#39;node-childPro-spawn.js&#39;, i]);  
 childProcess.stdout.on(&#39;data&#39;, function (data) {
 console.log(&#39;stdout: &#39; + data);
 });
childProcess.stderr.on(&#39;data&#39;, function (data) {
 console.log(&#39;stderr: &#39; + data);
 });
 childProcess.on(&#39;close&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39;+code);
 });
}
로그인 후 복사

터미널 실행 코드 결과는 다음과 같습니다.

G:\node\node-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(&#39;fs&#39;);
const child_process = require(&#39;child_process&#39;);
 for(var i=0; i<3; i++) {
 var childProcess = child_process.fork("node-childPro.js", [i]); 
 childProcess.on(&#39;close&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39; + code);
 });
}
로그인 후 복사

터미널 실행 코드 결과는 다음과 같습니다.

G:\node\node-childProcess> node node-childPro-fork.js
进程 0 执行。
进程 1 执行。
子进程已退出,退出码 0
进程 2 执行。
子进程已退出,退出码 0
子进程已退出,退出码 0
로그인 후 복사

exec,spawn,fork에 대하여 1.exec 이 함수는 generate를 친숙하게 캡슐화한 것이며 복잡한 명령을 직접 삽입할 수 있습니다. 함수는 하위 프로세스의 출력을 캐시하고 콜백 함수 매개변수의 형태로 하위 프로세스의 출력을 반환합니다. 3. Spawn이 하위 스레드 실행을 시작한 후 하위 프로세스의 데이터를 기본 프로세스로 지속적으로 반환하기 시작합니다. ("시스템 모니터링"과 같은 응용 시나리오)

4. 스폰은 콜백 기능을 지원하지 않습니다. 스트림을 통해 메인 프로세스에 데이터를 전송하여 여러 프로세스 간의 데이터 교환을 실현합니다.

5. 포크( )는 노드 프로세스를 파생시키는 데 사용되는spawn()의 특별한 경우입니다. 일반 ChildProcess 인스턴스의 모든 메서드 외에도 반환된 개체에는 내장 통신 채널도 있습니다.

위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

vue-cli에서 구성 요소 통신을 구현하는 방법

Angular를 사용하여 메시지 구성 요소 작성

EasyUI를 사용하여 Json 데이터 소스를 바인딩하는 방법

위 내용은 node.js를 사용하여 하위 프로세스를 만드는 방법(자세한 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!