>  기사  >  웹 프론트엔드  >  nodejs는 멀티스레드인가요?

nodejs는 멀티스레드인가요?

WBOY
WBOY원래의
2022-06-29 10:27:463768검색

Nodejs는 다중 스레드가 아니지만 단일 스레드입니다. nodejs는 JavaScript 엔진으로 인해 기본적으로 단일 스레드를 사용합니다. 단일 스레드, 높은 동시성 런타임 환경을 달성하기 위한 이벤트 중심 및 비동기식 "I/O" 방법이 될 수 있습니다.

nodejs는 멀티스레드인가요?

이 문서의 운영 환경: Windows 10 시스템, nodejs 버전 12.19.0, Dell G3 컴퓨터.

nodejs는 멀티 스레드인가요?

노드는 단일 스레드이며 단일 스레드 비동기 비차단 모드를 채택합니다.

JavaScript 엔진으로 인해 노드는 기본적으로 단일 스레드이며 node.js 애플리케이션은 멀티 코어 리소스를 활용할 수 없습니다.

Node.js는 이벤트 중심 및 비동기 I/O를 사용하여 단일 스레드, 높은 동시성 런타임 환경을 구현하며, 단일 스레딩은 동시에 한 가지 작업만 수행할 수 있음을 의미합니다.

nodejs는 비동기, 비차단을 구현합니다.

nodejs는 실제로 단일 스레드인 js 실행만 가지며 I/O는 분명히 다른 스레드입니다.

js 실행 스레드는 단일 스레드입니다. 필요한 I/O를 libuv에 전달하고 즉시 돌아와서 다른 작업을 수행한 다음 libuv가 지정된 시간에 다시 호출합니다.

자세히 말하면 nodejs는 먼저 노드 바인딩의 js 코드에서 C/C 코드로 호출된 다음 C/C 코드에 "요청 객체"라는 것을 캡슐화하여 libuv에 전달합니다. 이 요청 개체 중 일부는 실행해야 하는 함수 콜백과 유사합니다. libuv에 대한 콜백을 실행하고 실행 후 콜백을 구현하기만 하면 됩니다.

간단히 비동기 I/O의 일반적인 프로세스는 다음과 같습니다.

1. I/O 호출을 시작합니다

사용자가 Javascript 코드에서 Node 코어 모듈을 호출하고 매개변수와 콜백 함수를 코어 모듈에 전달합니다.

Node 코어 모듈은 전달된 매개변수와 콜백 함수를 요청 객체에 캡슐화합니다. .

이 요청 개체를 I/O 스레드 풀에 푸시하여 실행을 기다립니다.

Javascript 비동기 호출이 종료되고 Javascript 스레드는 계속해서 후속 작업을 수행합니다.

2. 콜백 실행

I/O 작업이 완료되면 이전에 요청 객체에 캡슐화된 콜백 함수를 검색하여 실행하여 Javascript 콜백의 목적을 달성합니다. (여기서 콜백에 대한 자세한 내용은 아래에 설명되어 있습니다.)

여기에서 볼 수 있듯이 실제로 우리는 Node.js의 단일 스레드를 오해하고 있었습니다.

사실 단일 스레드는 Javascript 런타임 환경의 단일 스레드를 의미합니다. Node.js에는 Javascript를 실행할 때 새 스레드를 생성하는 기능이 없습니다. 최종 실제 작업은 여전히 ​​Libuv 및 해당 이벤트 루프에서 수행됩니다. 이것이 단일 스레드 언어인 Javascript가 Node.js에서 비동기 작업을 구현할 수 있는 이유입니다. 둘은 충돌하지 않을 것이다.

확장된 지식:

Node.js 멀티 스레딩 개요

어떤 사람들은 Node.js가 단일 스레드이지만 순환 이벤트(이벤트 루프)를 사용하여 동시 실행 작업을 구현할 수 있다고 말할 수 있습니다. 본질을 조사해 보면 NodeJ는 실제로 두 개의 서로 다른 스레드를 사용합니다. 하나는 루프 이벤트를 처리하기 위한 기본 스레드이고 다른 하나는 작업자 풀의 일부 보조 스레드입니다. 이 두 스레드의 주요 기능과 관계는 그림과 같습니다.

nodejs는 멀티스레드인가요?

권장 학습: "nodejs 비디오 튜토리얼"

위 내용은 nodejs는 멀티스레드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.