[기술면접 준비] Node.js는 싱글스레드 인가요? Node.js 런타임이 동작하는 방식
정확하게 말하면 node는 여러가지의 스레드를 가질 수다. 그러나 자바스크립트를 실행하는 스레드는 단 하나이므로 노드를 싱글스레드라고 부른다. 그리고 그 싱글스레드가 바로 이벤트 루프다.
Javascript 런타임 자체에서는 비동기 API를 지원하지 않는다.
동시성을 보장하는 비동기, 논블로킹 작업들을 Javascript 엔진을 구동하는 런타임 환경에서 담당한다.
여기서 런타임 환경은 NodeJS, 브라우저를 말한다.
Nods.js는 v8이라는 자바스크립트 엔진과 비동기 작업을 처리하는 libuv 라는 라이브러리로 이뤄져있다.
Heap은 메모리 할당이 일어나는 곳이고, Call Stack은 코드 실행에 따라 호출 스택이 쌓이는 곳이다.
자바스크립트 엔진은 콜스택에 쌓인 실행 컨텍스트에 따라 위에서부터 차례로 실행이 일어나는 곳이기 때문에 비동기 처리를 할 수 없다. 따라서 비동기 처리가 필요하게 될 경우 Node api 를 통해 libuv 라이브러리에서 제공하는 비동기 처리를 하게 된다.
이때 libuv가 제공하는 것이 이벤트루프
이 이벤트루프가 싱글스레드이고 실제적으로 자바스크립트를 처리할 수 있는 메인스레드이기 때문에 node.js를 싱글스레드 라고 한다.
다시 정리하자면, 자바스크립트가 싱글스레드라고 하는 이유는 자바스크립트가 구동하는 환경에서 싱글스레드를 사용하기 때문이다. 여기서 싱글스레드가 바로 이벤트루프이다. 흔히들 메인 스레드가 자바스크립트를 실행학고 비동기 처리만 이벤트루프에서 가져간다고 생각하는 것은 잘못된 이해이다.