Programming

멀티 스레딩의 Node JS 대안 파악

procodes 2020. 6. 21. 21:17
반응형

멀티 스레딩의 Node JS 대안 파악


올바르게 이해하면 Node JS가 차단되지 않습니다 ... 그래서 데이터베이스 또는 다른 프로세스의 응답을 기다리는 대신 다른 것으로 이동하여 나중에 다시 확인합니다.

또한 단일 스레드입니다.

이 모든 것은 주어진 Node JS 프로세스가 단일 CPU 코어를 완벽하고 효율적으로 사용할 수 있지만 머신에서 다른 코어를 사용하지는 않는다는 것을 의미합니다.

이것은 물론 다른 CPU가 별도의 프로세스 인 한 다른 데이터베이스에서 SQL 데이터베이스 또는 의도적으로 분리 된 다른 CPU 헤비 서브 루틴과 같은 작업에 여전히 사용될 수 있음을 의미합니다.

또한 Node JS 프로세스에 무한 루프 또는 장기 실행 기능이있는 경우 해당 프로세스는 무한 루프 또는 장기 실행 기능이 중지되거나 전체 프로세스가 종료 될 때까지 더 이상 유용하지 않습니다.

이 모든 것이 맞습니까? 이해가 정확합니까?


그렇습니다. node.js 서버에는 내부 스레드 풀이 있으므로 차단 작업을 수행하고 작업이 완료되면 콜백 또는 이벤트로 기본 스레드에 알릴 수 있습니다.

따라서 스레드 풀에 다른 코어를 제한적으로 사용한다고 생각합니다. 예를 들어 비 블로킹 파일 시스템 읽기를 수행하는 경우 스레드 풀에서 스레드에게 읽기를 수행하고 콜백을 설정하도록 지시함으로써 구현 될 수 있습니다. 메인 node.js 프로그램이 다른 작업을 수행하는 동안 다른 스레드 / 코어에서 읽기가 발생할 수 있음을 의미합니다.

그러나 node.js 관점에서 볼 때, 그것은 완전히 단일 스레드이며 둘 이상의 코어를 직접 사용하지 않습니다.


네, 당신의 이해는 전적으로 정확하다고 말하고 싶습니다. 이 기사 ( 보관 됨 )는이 디자인의 근거를 아주 잘 설명합니다. 아마도 가장 중요한 단락 일 것입니다.

아파치는 멀티 스레드입니다 : 요청 당 스레드를 생성합니다 (또는 프로세스는 conf에 따라 다릅니다). 동시 연결 수가 증가하고 여러 동시 클라이언트에 서비스를 제공하기 위해 더 많은 스레드가 필요함에 따라 오버 헤드가 메모리를 차지하는 방식을 알 수 있습니다. 스레드와 프로세스는 메모리 비용이 많이 들기 때문에 Nginx와 Node.js는 멀티 스레드되지 않습니다. 단일 스레드이지만 이벤트 기반입니다. 이는 단일 스레드에서 많은 연결을 처리하여 수천 개의 스레드 / 프로세스로 인한 오버 헤드를 제거합니다.


이것이 오래된 스레드라도 Node.JS 앱에서 하나 이상의 코어를 사용하는 방법에 대한 아이디어를 공유 할 것이라고 생각했습니다. Nuray Altin이 언급했듯이 JXcore 는 그렇게 할 수 있습니다.

간단한 예 :

var method = function () {
    console.log("this is message from thread no", process.threadId);
};

jxcore.tasks.runOnThread(0, method);
jxcore.tasks.runOnThread(1, method);

// this is message from thread no 1
// this is message from thread no 0

기본적으로 두 개의 스레드가 있습니다 (로 변경 가능 jxcore.tasks.setThreadCount())

물론 작업으로 할 수있는 일이 훨씬 더 많습니다. 문서가 여기 있습니다 .

그 주제에 관한 기사는 거의 없습니다 :


이 질문은 거의 2 년 전에 물었습니다. 상황이 달라 지거나 Node.JS의 멀티 스레딩 문제에 대한 대안이 있습니다.

아래 블로그 게시물에 따르면 들어오는 '작업'확장 프로그램을 사용하면 일부는 다른 사용 가능한 코어의 이점을 직접 활용할 수 있습니다.

http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html


Node.js는 단일 스레드 응용 프로그램이지만 이벤트 및 콜백 개념을 통해 동시성을 지원할 수 있습니다. 다음은 필립 로버츠 (Philip Roberts )의 비디오로 이벤트 루프가 자바 스크립트에서 어떻게 작동하는지 설명합니다.

비디오를 보려면 여기를 클릭하십시오

(WebAPI 대신 Node.js에 C ++ API가 있습니다)

참고 URL : https://stackoverflow.com/questions/5200821/grasping-the-node-js-alternative-to-multithreading

반응형