Node 학습(12) - 프로세스 및 패키지

7400 단어

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, 셸은 UNIX에서-c 스위치를 식별할 수 있어야 한다/s /c.Windows에서 명령줄 해석은 호환 가능cmd.exe
  • timeout, 숫자, 시간 초과(기본값: 0)
  • maxBuffer, 숫자, stdout 또는 stderr에 허용되는 최대 버퍼(이진법), 초과하면 하위 프로세스가 죽습니다(기본값: 200*1024)
  • killSignal, 문자열, 종료 신호(기본값:'SIGTERM')
  • uid, 숫자, 사용자 프로세스의 ID 설정
  • gid, 숫자, 프로세스 그룹 ID 설정
  • 콜백: 리셋 함수로 세 개의 인자 error, stdout, stderr를 포함합니다.
    exec () 방법은 가장 큰 버퍼를 되돌려주고 프로세스가 끝날 때까지 기다리며 버퍼의 내용을 한꺼번에 되돌려줍니다.

    인스턴스


    js 파일 support 두 개를 만듭니다.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 파일 support 두 개를 만듭니다.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, stdoutstderr가 상위 프로세스에 연결되며, 그렇지 않으면 상위 프로세스에서 상속됩니다.(기본값: false)
  • uid Number 설정 사용자 프로세스의 ID
  • gid Number 설정 프로세스 그룹의 ID
  • 되돌아오는 대상은 ChildProcess 실례를 가진 모든 방법 외에 내장된 통신 채널이 있습니다.

    인스턴스


    js 파일 support 두 개를 만듭니다.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 JXcore 패키지


    JXcore는 다중 스레드를 지원하는 Node입니다.js 버전, 기본적으로 기존 코드에 대한 변경 없이 다중 코드로 안전하게 실행할 수 있습니다.

    JXcore 설치


    JXcore 설치 패키지를 다운로드하고 압축을 푸십시오. 압축을 푸는 디렉터리에서 jx 바이너리 파일 명령을 제공합니다. 다음은 이 명령을 주로 사용합니다.

    1단계, 다운로드


    JXcore 설치 패키지 다운로드https://github.com/jxcore/jxcore-release, 당신은 자신의 시스템 환경에 따라 설치 패키지를 다운로드해야 합니다.1. 윈도 플랫폼 다운로드: Download(Windows x64(V8).2. Linux/OSX 설치 명령:
    $ curl http://jxcore.com/xil.sh | bash
    

    사용 권한이 부족한 경우 다음 명령을 사용할 수 있습니다.
    curl http://jxcore.com/xil.sh | sudo bash
    

    위 단계가 올바르면 다음 명령을 사용하여 버전 번호 정보를 출력합니다.
    $ jx --version
    v0.10.32
    

    패키지 코드


    예를 들어, 우리의 Node.js 프로젝트는 다음 몇 개의 파일을 포함하는데, 그 중에서 index입니다.js가 마스터 파일입니다.
    drwxr-xr-x  2 root root  4096 Nov 13 12:42 images
    -rwxr-xr-x  1 root root 30457 Mar  6 12:19 index.htm
    -rwxr-xr-x  1 root root 30452 Mar  1 12:54 index.js
    drwxr-xr-x 23 root root  4096 Jan 15 03:48 node_modules
    drwxr-xr-x  2 root root  4096 Mar 21 06:10 scripts
    drwxr-xr-x  2 root root  4096 Feb 15 11:56 style
    

    다음에 우리는 jx 명령을 사용하여 상기 항목을 포장하고 index를 지정합니다.js는 Node입니다.js 프로젝트의 주 파일:
    $ jx package index.js index
    

    위 명령이 성공적으로 실행되면 다음 두 개의 파일이 생성됩니다.
  • index.jxp 이것은 컴파일해야 할 완전한 프로젝트 정보를 포함하는 중간부품 파일입니다.
  • index.jx 이것은 클라이언트에서 실행할 수 있는 완전한 패키지 정보의 2진 파일입니다.

  • JX 파일 로드


    jx 명령을 사용하여 프로젝트를 패키지화합니다.
    $ node index.js command_line_arguments
    

    JXcore를 사용하여 컴파일한 후에는 다음 명령을 사용하여 생성된 jx 바이너리 파일을 실행할 수 있습니다.
    $ jx index.jx command_line_arguments
    

    참조http://www.runoob.com/

    좋은 웹페이지 즐겨찾기