Programing

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

crosscheck 2020. 7. 5. 08:04
반응형

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


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

node.js 프로세스의 분기 및 생성의 차이점은 무엇입니까? 나는 포크가 스폰의 특별한 경우라는 것을 읽었지만 각각의 사용에 대한 다른 유스 케이스 / 반복은 무엇입니까?


스폰은 시스템 명령을 실행하도록 설계된 명령입니다. 스폰을 실행할 때 자체 프로세스에서 실행될 시스템 명령을 보내지 만 노드 프로세스 내에서 더 이상 코드를 실행하지 않습니다. 생성 된 프로세스에 리스너를 추가하여 코드가 생성 된 프로세스와 상호 작용할 수 있지만 새로운 V8 인스턴스는 생성되지 않습니다 (물론 명령이 다른 노드 명령이 아니라면이 경우 포크를 사용해야합니다!) 프로세서에서 하나의 노드 모듈 사본 만 활성화됩니다.

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

경험상, 코어 당 1-2 개의 노드 프로세스, 즉 램 클럭 / CPU 클럭 비율이 좋은 머신 또는 I / O가 많은 노드 프로세스 및 CPU 작업량이 적은 노드 프로세스의 경우 이벤트 중단 시간을 최소화합니다. 루프가 새로운 이벤트를 기다리고 있습니다. 그러나 후자의 제안은 미세 최적화이며 상황이 많은 프로세스 / 코어의 요구에 적합하도록 신중한 벤치마킹이 필요합니다. 머신 / 시나리오에 너무 많은 작업자를 스폰하여 실제로 성능을 저하시킬 수 있습니다.

궁극적으로 스폰에 Node 명령을 보내서 위와 같은 방식으로 스폰을 사용할 수 있습니다. 그러나 포크는 V8 인스턴스를 만드는 프로세스를 최적화하기 위해 몇 가지 작업을 수행하기 때문에 어리석은 일입니다. 분명히 말하면, 궁극적으로 스폰은 포크를 포함합니다. 포크는이 특정 용도에 가장 적합하고 매우 유용합니다.

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


  • spawnchild_process.spawn 은 주어진 명령으로 새로운 프로세스를 시작합니다.
  • fork - child_process.fork 메소드는 자식 프로세스를 생성하기위한 spawn () 의 특별한 경우입니다 .

spawn () 메소드

child_process.spawn 메소드는 주어진 명령으로 새로운 프로세스를 시작합니다. 그것은 다음과 같은 서명이 있습니다-

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

옵션 에 대해 더 읽어보기

spawn () 메소드는 스트림 (stdout & stderr)을 리턴하며 프로세스가 많은 양의 데이터를 리턴 할 때 사용해야합니다. spawn ()은 프로세스가 실행을 시작하자마자 응답을 받기 시작합니다.

fork () 메소드

child_process.fork 메소드는 노드 프로세스를 작성하기위한 spawn () 의 특수한 경우입니다 . 그것은 다음과 같은 서명이 있습니다-

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

fork 메소드는 일반 ChildProcess 인스턴스에 모든 메소드가있는 것 외에도 내장 된 통신 채널이있는 오브젝트를 리턴합니다.


TLDR

스폰 이 생성 될 때 - 부모 프로세스와 자식 프로세스 사이에 스트리밍 인터페이스만듭니다 .

스트리밍 인터페이스 수단 -이진 형식으로 데이터 버퍼링

포크

포크가 생성됩니다 - 그것은 생성 통신 채널 부모와 자식 프로세스 사이를

통신 채널 수단 -메시징

둘 다 동일한 데이터 전송을하는 것처럼 보입니다. 아래 차이점을 제외하고

스폰스트림에서 데이터 읽기 / 쓰기와 같은 지속적인 종류의 작업 을 수행하려는 경우 유용 합니다

포크메시지를 보내고 싶을 때 유용합니다

결론

스폰빅 데이터 / 파일 / 이미지를 스폰 프로세스에서 상위 프로세스 스트리밍 하는 데 사용해야합니다 .

Json / Xml 데이터 메시징을 수행하려면 fork를 사용해야합니다.

  • 예를 들어 부모로부터 10 개의 포크 프로세스가 생성 되었다고 가정합니다.
  • 각 프로세스는 일부 작업을 수행합니다.
  • 작업을 완료하는 각 프로세스는 부모 ' 프로세스 no.4 완료 ', ' 프로세스 no.8 완료 '에 메시지를 보냅니다.

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

반응형