자바스크립트 엔진은 자바스크립트 코드를 실행하는 프로그램 혹은 인터프리터라고 정의되어 있다.
자바스크립트 엔진은 표준적인 인터프리터로 구현할 수도 있고, 정적인 컴파일로로도 구현할 수 있다
두 가지 방식을 합친 JIT 컴파일(Just-In-Time Compilation)로도 구현할 수 있다.
웹 브라우저마다 각각의 다른 엔진을 사용하고 있다.
크롬의 V8엔진은 JIT컴파일에 해당한다.
자바스크립트는 싱글 쓰레드 언어이다. 즉, 한번에 한개의 일만 처리할 수 있다는 의미이다.
쓰레드 : 운영체제에서 실행중인 하나의 프로그램을 프로세스라 하며 이 프로세스의 작은 단위를 말한다. 쓰레드는 한 개의 일만 처리할 수 있으며, 스레드가 여러가지 모이면 프로세스라고 한다.
콜스택이란, 현재 실행중인 서브루틴(함수)에 대한 정보들을 담아두는 스택구조의 메모리 영역이다. 콜스택은 프로세스가 어느 단계를 거치고 있는지를 기록하게 된다.
(처리하고 있는 현재를 보여준다고 하면 이해가 쉽다.)
const function2 = (x, y) => {
return console.log(x + y);
}
const function1 = (a, b) => {
function2(a, b)
}
function1(1, 2); // 실행
위 함수를 호출하면 아래와 같이 스택이 쌓이는 것을 볼 수 있다.
자바스크립트 엔진이 아닌 브라우저에서 제공하는 API.
콜스택에서 불어온 함수 중 비동기적인 함수이면 Web API가 함수를 호출합니다. DOM
, AJax
, SetTimeOut
등이 이에 해당하며, Web API에서 처리를 끝마친 함수를 Callback Queue
로 이동시킨다.
Web API 에서 보내진 비동기 처리가 모이는 곳으로 콜 스택과는 다르게 선입선출되는 특징을 가진다.(콜스택은 후입선출)
모인 비동기 함수는 이벤트 루프의 감시 하에 놓이게 된다.
Event Loop
는 단 한개의 임무만을 수행한다. 바로 Call Stack
과 Queue
를 감시하는 일이다.
감시하다가 Call Stack
이 비게되면 Queue
에 쌓인 비동기 함수를 Call Stack
으로 보내주는 역할을 한다.
Call Stack
이 비어있을 때, Callback Queu
에 쌓여있는 비동기 함수 중 가장 먼저 들어온 함수를 보내준다.