August 13, 2021
자바스크립트 코드를 해석하고 실행하는 인터프리터
⚙ Webkit, V8…
자바스크립트 엔진은 크게 힙 + 호출스택 (Call Stack) 으로 구분된다
힙 Heap은 메모리 할당이 일어나는 부분
(변수, 객체 등이 저장되는 일종의 창고)
호출 스택 Call Stack은 함수가 호출되는 순서대로 쌓이는 스택
🤔 사실 정확히 말하면 호출 스택에 쌓이는 건
함수가 아니라 함수의 실행 컨텍스트가 쌓이는 것!
함수의 실행 컨텍스트(Execution Context)
자바스크립트 엔진이 함수를 실행시키기 위해 가지고 있어야하는 여러가지 정보들 (변수나 함수의 선언, 스코프, this … 같은 정보들을 물리적인 객체 형태로 보관하고 있다)
그래서 자바스크립트 엔진은…
= 동시에 하나의 일만 처리할 수 있다
= 호출 스택을 하나만 사용한다
👀 그럼 비동기 처리나 동시성에 대한 처리는 어디서 어떻게 하는 걸까?
브라우저는 자바스크립트 엔진 말고도
Web API, 이벤트루프, 콜백, 큐 ... 등을 가지고 있다
💡 동시성을 지원하기 위해 자바스크립트 엔진을 구동하는 환경인 브라우저가 비동기 처리를 담당한다

setTimeout, DOM 매서드, HTTP 요청 등은 Web API에서 제공하는 메서드
Web API 매서드들은 모두 비동기 메서드들이기 때문에 콜백함수를 콜백 큐에 집어 넣음
콜백 큐 Callback Queue에 비동기 처리가 끝난 후 실행 되어야 할 콜백함수들이 차례로 할당되고, 실행을 대기하게 됨호출 스택 Call Stack과 콜백 큐 Callback Queue를 계속 주시하고 있다가
호출 스택이 비어있으면, 콜백 큐에 먼저 들어온 순서대로 콜백 큐에 있는 콜백 함수들을 호출 스택으로 집어 넣는다.
호출 스택에서 콜백 함수가 실행되고 사라진다.
✨자바스크립트의 동시성을 지원하는 것이 바로 이벤트 루프라고 할 수 있다!