codememo

node.js 자식 프로세스 - 스폰과 포크의 차이

tipmemo 2023. 10. 30. 20:59
반응형

node.js 자식 프로세스 - 스폰과 포크의 차이

이것은 기본적인 질문처럼 보일 수도 있지만 문서를 찾을 수 없었습니다.

forking과 spanning a node.js 프로세스의 차이점은 무엇입니까?포크는 산란의 특별한 경우라고 읽었습니다만, 각각의 경우 사용하는 경우/반복 방법은 무엇입니까?

스폰은 시스템 명령을 실행하도록 설계된 명령입니다.스폰을 실행하면 자체 프로세스에서 실행되는 시스템 명령을 전송하지만 노드 프로세스 내에서 더 이상의 코드를 실행하지 않습니다.생성한 프로세스에 대한 수신기를 추가하여 코드가 생성된 프로세스와 상호 작용할 수 있지만, 새로운 V8 인스턴스가 생성되지는 않습니다(물론 명령어가 다른 Node 명령어가 아닌 경우에는 fork!를 사용해야 함). 그리고 노드 모듈의 복사본 하나만 프로세서에서 활성화됩니다.

포크는 V8 엔진의 새로운 인스턴스를 실행하는 스폰의 특별한 인스턴스입니다.즉, 기본적으로 동일한 노드 코드 기반에서 실행되는 여러 작업자를 생성하거나 특정 작업에 대해 다른 모듈을 생성할 수 있습니다.작업자 풀을 작성할 때 가장 유용합니다.노드의 비동기 이벤트 모델은 머신의 단일 코어를 상당히 효율적으로 사용할 수 있게 해주지만, 노드 프로세스는 멀티 코어 머신을 사용할 수 없게 해줍니다.이를 수행하는 가장 쉬운 방법은 단일 프로세서에서 동일한 프로그램의 여러 복사본을 실행하는 것입니다.

좋은 경험의 법칙은 코어당 1~2개의 노드 프로세스이며, 램 클럭/cpu 클럭 비율이 좋은 시스템의 경우 또는 I/O가 많이 필요하고 CPU 작업이 적은 노드 프로세스의 경우에는 이벤트 루프가 새로운 이벤트를 기다리는 다운타임을 최소화하는 것입니다.그러나 후자의 제안은 미시적 최적화이며, 많은 프로세스/핵심의 필요성에 맞게 사용자의 상황을 보장하기 위해 신중한 벤치마킹이 필요합니다.기계/시나리오에 너무 많은 작업자를 생성하여 실제로 성능을 저하시킬 수 있습니다.

궁극적으로 스폰 노드 명령을 전송하여 위와 같은 방식으로 스폰을 사용할 수 있습니다.하지만 포크는 V8 인스턴스를 생성하는 프로세스를 최적화하기 위해 몇 가지 작업을 수행하기 때문에 이는 어리석은 일이 될 것입니다.분명히 말씀드리지만, 궁극적으로 그 산란은 포크를 포함합니다.포크는 이 특별한, 매우 유용한 사용 사례에 딱 적합합니다.

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

산란

스폰이 호출되면 부모 프로세스와 자식 프로세스 사이에 스트리밍 인터페이스가 생성됩니다.스트리밍 인터페이스 — 이진 형식으로 데이터를 한 번에 버퍼링합니다.

포크

포크가 호출되면 부모 프로세스와 자식 프로세스 간의 통신 채널이 만들어집니다. 커뮤니케이션 채널 — 메시징

스폰과 포크의 차이점

둘 다 데이터를 전송하는 방식이 매우 유사하게 들리지만 몇 가지 차이점이 있습니다.

  • 스폰은 1기가바이트 비디오, 이미지 또는 로그 파일 전송과 같은 이진/인코딩 형식의 연속 데이터 전송을 원할 때 유용합니다.
  • 포크는 개별 메시지를 보낼 때 유용합니다.JSON아니면XML데이터 메시지.

결론

산란은 생성된 프로세스에서 상위 프로세스로 이미지와 같은 대용량 데이터를 스트리밍하는 데 사용되어야 합니다.

발송에는 포크를 사용해야 합니다.JSON아니면XML메시지들. 들어 상위 프로세스에서 10개의 분기 프로세스가 생성된다고 가정합니다.예를 들어 상위 프로세스에서 10개의 분기 프로세스가 생성된다고 가정합니다.각 프로세스는 일부 작업을 수행합니다.각 프로세스에 대해 작업을 완료하면 다음과 같은 내용의 메시지가 부모에게 다시 전송됩니다."Process #4 done"아니면"Process #8 done".

  • sporn - child_process. spawn는 지정된 명령으로 새 프로세스를 시작합니다.
  • 포크 - 자식 프로세스입니다.포크 메소드는 자식 프로세스를 만들기 위한 스폰 ()의 특수한 경우입니다.

스폰() 방법

child_process. spawn 메서드가 지정된 명령을 사용하여 새 프로세스를 시작합니다.다음과 같은 서명이 있습니다.

child_process.spawn(command[, args][, options])

옵션에 대해 자세히 알아보기

spon() 메서드는 스트림을 반환하며(stdout &stderr) 프로세스에서 데이터 볼륨을 반환할 때 사용해야 합니다. spon()은 프로세스가 실행되는 즉시 응답을 받기 시작합니다.

포크() 메소드

child_process.fork method는 Node process를 만들기 위한 sporn()의 특수한 경우입니다.다음과 같은 서명이 있습니다.

 child_process.fork(modulePath[, args][, options])

포크 메서드는 일반적인 ChildProcess 인스턴스에 모든 메서드가 있을 뿐만 아니라 통신 채널이 내장된 개체를 반환합니다.

산란 -

  • 스트리밍 인터페이스를 만듭니다.바이너리/인코딩 형식의 연속적인 데이터 전송에 유용합니다.
  • 새 v8 인스턴스를 만들지 않습니다.

포크-

  • 통신 채널 b/w 부모 및 자식 프로세스를 만듭니다.json/xml로 개별 메시지를 보낼 때 유용합니다.

  • 새 v8 인스턴스를 만듭니다.

언급URL : https://stackoverflow.com/questions/17861362/node-js-child-process-difference-between-spawn-fork

반응형