js는 싱글 스레드로 구성이 되어있어서 한번에 1가지 작업밖에 하지 못하는 동기 프로그래밍 언어이다.
js가 싱글 스레드이지만 비동기 처리가 가능한 이유
Heap : 구조화가 되지 않은 형태로 객체들과 변수들의 메모리 할당이 이루어진다
Call Stack : js에서 수행해야하는 함수들을 순차적으로 스택에 담아 실행한다.
웹 브라우저가 제공하는 api로 ajax라던지 비동기 작업들을 실행한다
Web APIs에서 실행된 비동기 함수들이 실행된 후, 기다리는 곳이다
수시로 Callback Queue를 체크하며 존재하는 경우 Call Stack이 비어있을때 CallBack Queue를 Call Stack에 넘겨준다.
위의 내용을 다시 정리하자면 아래와 같다
node.js는 서버가아닌 JS를 작동시키는 런타임이다
작업이 완료되지 않았지만 막지 않는다
즉, 싱글스레드임에도 비동기 Input - Output처리가 가능하다
이벤트 발생순서로 처리를 한다
발생한 순서대로 콜백함수를 저장하며 순서대로 실행한다
이것은 Event Loop가 CallBack Queue에 저장하고, 스택에 넣어 작동시키기 때문