Node를 자세히 분석합니다.js 다중 프로세스

우리는 모두 노드를 안다.js는 단일 스레드 모드로 실행되지만, 이벤트 드라이브를 사용하여 처리하고 발송합니다. 이렇게 하면 우리가 다중 핵 cpu 시스템에서 여러 개의 하위 프로세스를 만들어서 성능을 향상시키는 데 도움이 됩니다.
모든 하위 프로세스는 항상 세 개의 흐름 대상을 가지고 있습니다:child.stdin, child.stdout와child.stderr.그들은 부모 프로세스의 stdio 흐름을 공유할 수도 있고, 독립적으로 유도된 흐름 대상일 수도 있다.
Node는 child_를 제공합니다프로세스 모듈은 다음과 같은 방법으로 하위 프로세스를 생성합니다.
  • exec - child_process.exec는 하위 프로세스를 사용하여 명령을 실행하고 하위 프로세스의 출력을 캐시하며 하위 프로세스의 출력을 리셋 함수 매개 변수로 되돌려줍니다
  • spawn - child_process.spawn에서 지정한 명령행 매개 변수를 사용하여 새 프로세스를 만듭니다..
  • fork - child_process.fork는spawn()의 특수한 형식으로 하위 프로세스에서 실행되는 모듈입니다. 예를 들어 fork('./son.js')는spawn('node', ['./son.js'])에 해당합니다.spawn 방법과 달리 fork는 부모 프로세스와 하위 프로세스 사이에 통신 파이프를 만들어 프로세스 간의 통신에 사용합니다..
  • exec () 메서드
    child_process.exec는 하위 프로세스를 사용하여 명령을 실행하고 하위 프로세스의 출력을 캐시하며 하위 프로세스의 출력을 리셋 함수 매개 변수로 되돌려줍니다.
    구문은 다음과 같습니다.
    child_process.exec(command[, options], callback)
    매개 변수
    매개변수 설명은 다음과 같습니다.
    command: 문자열, 실행할 명령, 매개 변수는 공백으로 구분합니다
    options: 객체, 다음을 수행할 수 있습니다.
  • cwd, 문자열, 하위 프로세스의 현재 작업 디렉터리
  • env, 대상 환경 변수 키 값 맞습니다
  • encoding, 문자열, 문자 인코딩 (기본값:'utf8')
  • 셸, 문자열, 명령을 실행할 셸 (기본값: UNIX에서/bin/sh, Windows에서 cmd.exe, 셸에서 -c 스위치가 UNIX에 있거나/s/c가 Windows에 있는지 인식해야 합니다. Windows에서 명령줄 해석은 cmd.exe와 호환되어야 합니다
  • timeout, 숫자, 시간 초과 (기본값: 0)
  • maxBuffer, 숫자, stdout 또는 stderr에서 허용하는 최대 버퍼 (2진수), 초과하면 하위 프로세스가 죽임 (기본값: 200*1024)
  • killSignal, 문자열, 종료 신호(기본값: "SIGTERM")
  • uid, 숫자, 사용자 프로세스의 ID를 설정합니다
  • gid, 숫자, 프로세스 그룹의 ID를 설정합니다
  • callback: 리셋 함수, 세 개의 매개 변수 error, stdout, stderr를 포함합니다.
    exec () 방법은 가장 큰 버퍼를 되돌려주고 프로세스가 끝날 때까지 기다리며 버퍼의 내용을 한꺼번에 되돌려줍니다.
    인스턴스
    두 개의 js 파일 지원을 만듭니다.js와 마스터.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:
    spawn () 방법
    child_process.spawn은 다음과 같은 구문 형식으로 지정된 명령줄 매개변수를 사용하여 새 프로세스를 생성합니다.
    child_process.spawn(command[, args][, options])
    매개 변수
    매개변수 설명은 다음과 같습니다.
    command: 실행할 명령
    args:Array 문자열 매개 변수 그룹
    options Object
  • cwd String 하위 프로세스의 현재 작업 디렉토리입니다
  • env Object 환경 변수 키 값 쌍
  • stdio Array|String 하위 프로세스의 stdio 구성
  • detached Boolean이라는 하위 프로세스는 프로세스 그룹의 리더가 될 것입니다
  • uid Number 사용자 프로세스의 ID를 설정합니다
  • gid Number 프로세스 그룹의 ID 설정
  • spawn () 방법은 흐름 (stdout & stderr) 을 되돌려줍니다. 프로세스가 대량의 데이터를 되돌릴 때 사용됩니다.프로세스가 실행되기 시작하면spawn () 은 응답을 받기 시작합니다.
    인스턴스
    두 개의 js 파일 지원을 만듭니다.js와 마스터.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
    fork 방법
    child_process.fork는 spawn () 방법의 특수한 형식으로 프로세스를 만드는 데 사용됩니다. 문법 형식은 다음과 같습니다.
    child_process.fork(modulePath[, args][, options])
    매개 변수
    매개변수 설명은 다음과 같습니다.
    modulePath:String, 하위 프로세스에서 실행될 모듈
    args:Array 문자열 매개 변수 그룹
    options:Object
  • cwd String 하위 프로세스의 현재 작업 디렉토리입니다
  • env Object 환경 변수 키 값 쌍
  • execPath String에서 하위 프로세스를 만드는 실행 가능한 파일입니다
  • execArgv Array 하위 프로세스의 실행 가능한 파일의 문자열 매개 변수 그룹 (기본값:process.execArgv)
  • silent Boolean이true라면, 하위 프로세스의 stdin, stdout와 stderr는 부모 프로세스에 연결되고, 그렇지 않으면 부모 프로세스에서 계승됩니다.(기본값:false)
  • uid Number 사용자 프로세스의 ID를 설정합니다
  • gid Number 프로세스 그룹의 ID 설정
  • 반환된 대상은 ChildProcess의 실례를 가진 모든 방법을 제외하고 내장된 통신 채널이 있습니다.
    인스턴스
    두 개의 js 파일 지원을 만듭니다.js와 마스터.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
    이상은 Node를 자세히 분석한 것입니다.js 다중 프로세스의 상세한 내용, 더 많은 Node.js 다중 프로세스의 자료는 우리의 다른 관련 문장을 주목하세요!

    좋은 웹페이지 즐겨찾기