JS언어는 단일 스레드 언어이다.
JS 엔진은 콜 스택이 하나이다. 즉, 한번에 두개 이상의 코드를 처리할 수 없다.
JS 엔진이란, JS 코드를 해석(인터프리팅)하고 실행하는 프로그램 혹은 인터프리터이다.
JS 코드가 실행되는 환경을 런타임이라고 한다.
실행 환경에 따라 사용되는 JS 엔진이 다르다. (ex. 크롬 V8엔진)
- 자바스크립트 엔진 종류
콜 스택이란, 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 대한 정보를 저장(기록)하는 스택 자료구조이다.
실행 스택(execution stack), 제어 스택(control stack), 런 타임 스택(run-time stack), 기계 스택(machine stack), 스택(the stack) 으로 불린다.
힙은 거의 구조화되지 않은 영역(unstructured)의 메모리이다.
객체들은 힙 내부에 할당되고, 변수와 객체들의 모든 메모리 할당이 여기서 일어난다.
동기(syncronous) : 요청을 보내고 응답을 받기 전까지 다음 동작을 실행하지 않음
비동기(asyncronous) : 요청을 보내고 응답 여부에 상관없이 다음 동장을 실행
JS는 동기적인 프로그래밍 언어이다.
JS 엔진은 JS 코드를 비동기적으로 실행할 수 있는 Web API를 지원한다.
Web API란, DOM events, http request, setTimeout과 같은 비동기 이벤트들을 다루며, 브라우저 내부에 C++로 구현되어 만들어졌습니다.
콜백함수를 콜백 큐에 넣는 역할을 한다.
콜백 큐란, JavaScript 런타임이 처리 할 메시지 목록이다.
콜백 큐의 내부에는 여러가지 큐(queue)가 있고, Web API의 종류에 따라 다른 큐로 이동한다.
각각의 우선순위가 정해져 있다.
1.Microtask Queue
2.Animation Frames
3.Task Queue
이벤트 루프는 실행 컨텍스트와 콜백 큐를 감시한다.
스택이 완전히 비었을 때 선입선출 방식으로 콜백 큐의 함수들을 호출하고 콜 스택에 쌓는다.