nodejs는 과연 싱글 스레드일까?
구글링을 하면 다소 모호한 답변들이 많이 올라와 있다.
싱글 스레드이지만 멀티스레드와 같이 동작한다...

뭐야 이게... 내가 산 주식 가격이 오를 수도 있지만 떨어질 수도 있다는 말이랑 똑같잖아...
오늘은 왜 이런 기이한 말이 나왔는지 알아보자.
nodeJS 동작 원리
nodej의 v8엔진은 자바스크립트를 기계어로 번역하는 일을 하는데,
웹에서와 마찬가지로 스택에 이벤트를 쌓고 상단의 이벤트를 우선 처리해 반환하는 방식으로 작동한다.
우리가 싱글 스레드 언어라고 부르는 이유다.
하지만 한 번에 처리하기 어려운 작업이나 비동기 처리의 경우 v8엔진은 이벤트를 잠시 큐에 옮겨놓고 해당 요청이 처리되면
이벤트 루프가 다시 스택에 옮겨놓는 방식으로 동작하는데, 웹의 경우 Web API가 해당 역할을 하지만
nodejs의 경우 libUV라고 하는 오픈 라이브러리 소스가 이 역할을 하고 있다.
libUV는 또다시 구개의 큰 파트로 나뉘는데 Event Loop와 Thread Pool이다.
이벤트 루프는 네트워크 io 혹은 콜백 실행 등 다소 가볍게 처리할 수 있는 일을 처리하는 반면
Thread Pool은 파일 액세스와 같은 무거운 일을 처리한다.
정리하자면, libUV에서 비동기적으로 데이터 처리를 하기는 하지만 v8엔진에서의 이벤트 처리는 여전히 싱글 스레드 방식이므로 nodejs는 싱글 스레드다.
'Javascript' 카테고리의 다른 글
[JS] 프로미스와 콜백 (0) | 2022.03.21 |
---|---|
[JS] 특수문자를 거르는 정규식 표현 (0) | 2022.03.15 |
[NodeJS] 런타임이란 무엇일까? (0) | 2022.03.14 |
[JS] Hoisting이란? (0) | 2022.03.13 |
[JS] let, var, const의 차이점 (0) | 2022.03.13 |