자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다.
함수를 실행할 수 있는 창구가 단 하나이며, 동시에 2개 이상의 함수를 동시에 실행할 수 없다는 것을 의미한다.
한 번에 하나의 태스크만 실행할 수 있는 싱글 스레드(single thread)방식으로 동작한다.
그래서 처리에 시간이 걸리는 태스크를 실행하는 경우 블로킹(blocking 작업 중단)이 발생하게 된다.
👉 이러한 현상을 비동기 처리를 통해 해결할 수 있다.
자바스크립 엔진은 크게 2개의 영역으로 구분할 수 있다.
콜 스택 (call stack) : 생성된 실행 컨텍스트가 추가되고 제거되는 스택 자료구조인 실행 컨텍스트 스택
함수를 호출하면 함수 실행 컨텍스트가 순차적으로 콜 스택에 푸쉬되어 순차적으로 실행된다.
힙(heap) : 객체가 저장되는 메모리 공간
콜 스택의 요소인 실행 컨텍스트는 힙에 저장된 객체를 참조한다.
✔ 비동기 동작 원리
태스크 큐는 마이크로태스크 큐와 매크로태스크 큐(일반 태스크큐 라고도 불림)으로 나뉜다.
둘 다 콜백 함수나 이벤트 핸들러를 일시 저장한다는 점에서 동일하지만, 태스크 큐보다 마이크로태스크 큐가 더 우선순위가 높다.
즉, 이벤트 루프는 콜 스택이 비면 먼저 마이크로태스크 큐에서 대기하고 있는 함수를 가져와 실행한다.
이후 마이크로태스크 큐가 비면 태스크 큐에 대기하고 있는 함수를 가져와 실행한다.