노드는 단일 스레드 비동기 비차단 모드를 사용하여 단일 스레드에서 실행되지만, 엄밀히 말하면 노드에 여러 스레드가 있다는 것은 기본 노드에서 실행되는 노드에 하나의 js 엔진만 있음을 의미합니다. 스레드 및 기타 비동기 작업도 실행을 위한 독립적인 스레드가 있으며 노드는 기본적으로 단일 스레드입니다. "node.js"는 멀티 코어 리소스를 활용할 수 없습니다.
이 튜토리얼의 운영 환경: windows10 시스템, nodejs 버전 12.19.0, Dell G3 컴퓨터.
노드가 단일 스레드 비동기 비차단 모드를 사용하여 단일 스레드에서 실행되고 있습니다.
노드라고 하면 단일 스레드, 비동기 IO, 이벤트 중심 등의 단어가 바로 떠오를 수 있습니다. 가장 먼저 명확히 해야 할 것은 노드가 실제로 단일 스레드인지 여부입니다. 단일 스레드인 경우 비동기 IO 및 예약된 이벤트(setTimeout, setInterval 등)가 실행되는 위치입니다.
사실 엄밀히 말하면 노드는 단일 스레드가 아닙니다. 노드에는 다음을 포함하여 다양한 종류의 스레드가 있습니다.
js 엔진 실행 스레드
타이머 스레드(setTimeout, setInterval)
비동기 http 스레드(ajax)
일반적으로 단일 스레드라고 부르는 것은 노드에 하나만 있다는 의미입니다. Node.js 엔진은 메인 스레드에서 실행됩니다. 기타 비동기 IO 및 이벤트 기반 관련 스레드는 libuv를 사용하여 내부 스레드 풀 및 스레드 예약을 구현합니다. libv에는 Event Loop가 있는데, Event Loop를 통해 전환하면 멀티스레딩과 유사한 효과를 얻을 수 있습니다. 간단히 말해서, 이벤트 루프는 실행 스택과 이벤트 큐를 유지 관리합니다. 현재 실행 스택에 비동기 IO 및 타이머 함수가 있으면 이러한 비동기 콜백 함수가 이벤트 큐에 배치됩니다. 현재 실행 스택의 실행이 완료된 후 이벤트 큐의 비동기 콜백 함수는 이벤트 큐의 특정 순서에 따라 실행됩니다.
위 그림에서 실행 스택부터 이벤트 큐까지, 마지막으로 이벤트 큐에서 콜백 함수가 특정 순서에 따라 실행되는 전체 프로세스는 이벤트 루프의 단순화된 버전입니다. 또한 콜백 함수가 실행되면 실행 스택도 생성됩니다. 콜백 함수 내에 비동기 함수가 중첩될 수 있습니다. 이는 실행 스택이 중첩된다는 의미입니다.
즉, 노드의 단일 스레드는 js 엔진이 유일한 메인 스레드에서만 실행된다는 의미입니다. 다른 비동기 작업도 독립적인 스레드에 의해 실행됩니다. 멀티 스레딩과 유사한 컨텍스트 전환이 libv의 이벤트 루프를 통해 구현됩니다. 풀 예약. 스레드는 가장 작은 프로세스이므로 노드도 단일 프로세스입니다. 이는 노드가 단일 스레드 및 단일 프로세스인 이유를 설명합니다.
추천 학습: "nodejs 비디오 튜토리얼"
위 내용은 노드는 모두 단일 스레드로 실행됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!