자바스크립트는 싱글 쓰레드 기반 언어이다. 그럼에도 불구하고 동시성 언어라고 불릴 수 있는 이유는 웹 브라우저가 제공하는 API를 통해 동시에 작업을 할 수 있기 때문이다.
노드JS가 비동기 작업을 처리하는 방법
Node.js는 자바스크립트 언어를 사용하고 자바스크립트 언어는 싱글 스레드이다. 싱글 스레드면 한 번에 하나의 작업만 할 수 있는데 node.js를 사용할 때 어떻게 비동기로 파일을 열고 HTTP request를 보낼 수 있을까?
Node.js는 LIBUV 라이브러리에서 제공하는 Event Loop를 이용한다. 어떠한 Task들이 들어오면 Libuv에 있는 이벤트 루프를 이용해서 처리해주고 있다.
node.js는 I/O 작업을 libuv에게 위임함으로써 논 블로킹 I/O를 지원하고 그 기반에는 이벤트 루프가 있다.
정리
1. 코드가 호출 스택에 쌓인 후 실행하되, 그것이 비동기 작업이라면 이벤트 루프는 비동기 작업을 위임한다.
2. Node를 구성하는 libuv는 해당 비동기 작업이 OS 커널에서 할 수 있는 것인지 아닌지 (thread pool에서 처리)를 판단하여 비동기 함수를 처리한다
3. 비동기 작업을 처리하고 콜백함수를 호출한다.
참고
https://sjh836.tistory.com/149
https://blog.naver.com/pjt3591oo/221976414901
'NODE.JS' 카테고리의 다른 글
[Node.js] Event Loop Phase 더 알아보기 (0) | 2024.01.12 |
---|---|
[Node.js] Event Loop (이벤트 루프) (0) | 2024.01.12 |
[Node.js] package.json 이름 규칙 (String does not match the pattern of "^(?:@[a-z0-9-*~][a-z0-9-*._~]*/)?[a-z0-9-~][a-z0-9-._~]*$".) (1) | 2024.01.07 |
[Node.js] Blocking과 Non-Blocking (0) | 2024.01.05 |
[Node.js] Node.js가 작업을 처리하는 방법 (0) | 2024.01.05 |