멀티스레딩 대신 노드 JS 파악
노드 JS가 차단되지 않는다는 것을 올바르게 이해한다면...따라서 데이터베이스나 다른 프로세스의 응답을 기다리는 대신 다른 곳으로 이동하여 나중에 다시 확인합니다.
또한 단일 나사산입니다.
이 모든 것은 주어진 노드 JS 프로세스가 단일 CPU 코어를 완전하고 효율적으로 활용할 수 있지만 기계의 다른 코어는 사용하지 않는다는 것을 의미합니다. 이 경우에는 한 번에 두 개 이상을 사용하지 않습니다.
이는 물론 다른 CPU가 별도의 프로세스인 한 SQL 데이터베이스나 의도적으로 분리된 다른 CPU 헤비 서브루틴과 같은 다른 프로세스에서 여전히 사용될 수 있음을 의미합니다.
또한 노드 JS 프로세스에 무한 루프 또는 긴 실행 함수가 있는 경우, 무한 루프 또는 긴 실행 함수가 중지될 때까지(또는 전체 프로세스가 중지될 때까지) 해당 프로세스는 더 이상 유용하지 않습니다.
이 모든 것이 괜찮습니까?제가 이해한 게 맞나요?
거의 맞아요, 네.node.js 서버에는 차단 작업을 수행하고 작업이 완료되면 콜백 또는 이벤트로 기본 스레드에 알릴 수 있도록 내부 스레드 풀이 있습니다.
따라서 스레드 풀에 다른 코어를 제한적으로 사용할 것으로 예상됩니다. 예를 들어, 비차단 파일 시스템 읽기를 수행하는 경우 스레드 풀의 스레드에 읽기를 수행하도록 지시하고, 읽기가 완료되면 콜백을 설정하면 기본 노드에서 다른 스레드/코어에서 읽기가 발생할 수 있습니다.js 프로그램은 다른 것을 하고 있습니다.
그러나 node.js의 관점에서는 완전히 단일 스레드이며 두 개 이상의 코어를 직접 사용하지는 않습니다.
네, 저는 당신의 이해가 전적으로 옳다고 생각합니다.이 문서(자료 보관)는 이 설계의 근거를 잘 설명합니다.이것은 아마도 가장 중요한 단락일 것입니다.
Apache는 멀티 스레드입니다. 요청당 스레드를 생성합니다(또는 프로세스는 conf에 따라 다릅니다).동시 연결 수가 증가하고 여러 개의 동시 클라이언트를 지원하기 위해 더 많은 스레드가 필요함에 따라 오버헤드가 메모리를 소모하는 방식을 확인할 수 있습니다.Nginx 및 Node.js는 스레드 및 프로세스에 메모리 비용이 많이 들기 때문에 멀티스레드가 아닙니다.단일 스레드이지만 이벤트 기반입니다.따라서 단일 스레드에서 많은 연결을 처리하여 수천 개의 스레드/프로세스에서 발생하는 오버헤드를 제거할 수 있습니다.
비록 이것이 오래된 스레드일지라도, 저는 노드에서 하나 이상의 코어를 활용하는 방법을 아이디어와 공유할 것이라고 생각했습니다.JS app.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
기본적으로 두 개의 스레드가 있습니다(으로 변경할 수 있습니다).
물론 작업으로 할 수 있는 일이 훨씬 더 많습니다.서류가 여기 있습니다.
해당 주제에 대한 몇 가지 기사:
거의 2년 전에 이 질문이 있었기 때문에.상황이 달라지거나 Node.JS에서 멀티스레딩 문제에 대한 대안적인 접근 방식이 있습니다.
아래 블로그 게시물에 따르면, 들어오는 '작업' 확장을 사용하면 일부는 사용 가능한 다른 코어로부터 직접적인 혜택을 받을 수 있습니다.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
Node.js는 단일 스레드 애플리케이션이지만 이벤트 및 콜백 개념을 통해 동시성을 지원할 수 있습니다.필립 로버츠의 비디오는 자바스크립트에서 이벤트 루프가 어떻게 작동하는지 설명합니다.
(Node.js에는 WebAPI 대신 C++ API가 있습니다.)
언급URL : https://stackoverflow.com/questions/5200821/grasping-the-node-js-alternative-to-multithreading
'programing' 카테고리의 다른 글
PowerShell에서 디렉터리 제외 (0) | 2023.09.04 |
---|---|
Sinon 오류 이미 래핑된 함수를 래핑하려고 했습니다. (0) | 2023.09.04 |
Node.js MySQL - 오류: connect ECONFUSED (0) | 2023.09.04 |
XML 파일을 통해 TextView 굵은 글씨로 표시하시겠습니까? (0) | 2023.09.04 |
MariaDB to Zarr Array, 어떻게 해야 하나요? (0) | 2023.09.04 |