우선 nodeJs의 동작원리를 알기 전 javascript의 동작원리부터 알아야한다.
그 이유는 밑의 링크 참고!
자바스크립트는 싱글스레드로 동작하는 언어이다.
(싱글스레드_한번에 하나의 작업만 수행할수있음)
자바스크립트 런타임은 메모리힙과 콜스택으로 구성되는데 메모리힙은 메모리 할당을 담당하고 콜스택은 코드가 호출되면서 스택으로 쌓이는 곳이다. 콜스택함수는 후입선출(LIFO)방식으로 처리된다.
때문에 자바스립트는 싱글스레드 기반으로써 하나의 메인스레드와 하나의 콜스택을 가지고 있다.
Nodejs의 기반이 되는 자바스크립트가 싱글스레드이기때문에 Nodejs도 싱글스레드라고 한다.
하지만 완전한 싱글스레드 기반은 아니다.
일부 블로킹 작업들은 libuv의 스레드 풀에서 수행되기 때문임
libuv란?
libuv는 비동기 입출력, 이벤트 기반에 초점을 맞춘 라이브러리이다. 전통적으로 IO처리는 요청마다 스레드를 사용하는 방식이다.
또한 윈도우와 리눅스 플랫폼의 비동기 IO인터페이스를 추상화시켰기 때문에 크로스플랫폼으로 역할도 한다