[multithreading] 멀티 스레딩의 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가 있습니다)


답변