node.js에서 비동기로 처리될 수 있는 이유는 libUV가 제공하는 이벤트루프와 제공된 시스템 커널 API를 이용하기 때문
시스템마다 제공하는 API(윈도우: IOCP, 리눅스: epoll, 맥: kqueue) 이용해서 (네트워크, 파일 I/O등) 비동기 실행과 라이프 사이클을 제공하는 C 라이브러리
네트워크, 소켓 작업은 시스템 API를 이용하며
파일은
시스템 API는 제공하나 추상화 문제로 별도의 쓰레드를 이용
동기 처리일 경우 시스템 API를 동기 처리는 쓰레드풀을 이용
nodejs는 파일을 읽거나 네트워크 같은 작업을 시스템 또는 다른 쓰레드에게 넘겨주면 시스템 또는 쓰레드는 작업 결과를 콜백으로 큐와 같은 자료구조에 등록
이때 큐는 하나의 큐가 아님
[DeepDive] NodeJS C++ Addon 깊게 입문하기
Native Extention에 대해 설명하기에 앞서, 먼저 Node.JS 가 어떻게 구성되어 있는지에 대해 알아야 합니다. Node.JS 에서 실행가능한 프로그래밍 언어입니다. 자바스크립트 언어로 작성된 코드를 실행해주는 엔진입니다. 자바스크립트의 객체를 생성하거나, 함수를 호출하는 방법과 같은 매커니즘을 정의합니다. 비동기 실행과 라이프 사이클을 제공하는 C 라이브러리입니다. Node.JS의 모든 비동기 동작은 LibUv 가 관리합니다.
https://aerocode.net/341
![[DeepDive] NodeJS C++ Addon 깊게 입문하기](https://www.notion.so/image/https%3A%2F%2Fk.kakaocdn.net%2Fdn%2FcALM00%2FbtqCD8APV9Z%2FSUSQI5BVUk3uZpahWDIqTk%2Fimg.jpg?table=block&id=e3b213ac-1214-448b-a3fa-0e4ff65545eb&cache=v2)
nodejs의 내부 동작 원리 (libuv, 이벤트루프, 워커쓰레드, 비동기)
이벤트루프는 nodejs 의 핵심개념인데, 열심히 파헤쳐보자. 먼저 구글에 널려있는 많은 아키텍처들은 전부 틀렸다고 한다. 이 말은 libuv의 핵심 개발자 Bert Belder 등이 했다고 참조문서에서 말한다. 아무튼 그래서 구글링을 열심히해봐도 공식문서에 부합하는 아키텍쳐 그림이 없었다. nodejs 만든사람이 하나 그려줬으면 좋겠지만.... 일단 직접 그려보았다. 아래는 거짓이라고 말한 사진들이다. 널리 통용되고있어서 구글이미지검색에서도 상위에 있는 것들..
https://sjh836.tistory.com/149

Seonglae Cho