자바스크립트는 싱글 쓰레드 기반, 콜백 큐를 사용한다.
정적인 HTML 콘텐츠를 프로그램 구현을 통해 동적으로 변경하거나 사용자와의 상호작용을 담당한다.
자바스크립트의 대표적인 예는 google V8 엔진이다.
크롬과, node.js 에서 사용한다.
자바스크립트 개발자들은 setTimeout 같은 브라우저 내장 api를 사용한다.
하지만 자바스크립트 엔진은 따로 제공하지 않는다.
참조 타입(객체 등) 데이터가 저장된다.
메모리 할당이 일어나는 곳.
자바스크립트는 기본적으로 싱글 쓰레드 기반 언어이다.
호출 스택이 하나라는 말이다.
그래서 한번에 한 작업만 처리할 수 있다.
우리가 프로그램 상에서 어디에 있는지를 기록하는 자료구조이다.
만약 함수를 실행하면, 해당 함수는 호출 스택의 가장 상단의 위치하게 된다.
함수 실행이 끝날때, 해당 함수를 호출 스택에서 제거한다.
그림의 step(단계)를 스택 프레임(Stack Frame)이라고 한다.
Web APIs가 브라우저가 제공하는 API 이다.
자바스크립트 언어 자체가 비동기 동작을 지원하는 것이 아니다.
핵심은 브라우저가 가지고 있다. (나만 자바스크립트가 지원하는 줄;)
API의 포장지를 까보자면
Call Stack에서 실행된 비동기 함수는 Web API를 호출하게 된다.
Web API는 콜백함수를 Callback Queue에 밀어 넣는다.
비동기적으로 실행된 콜백함수가 보관 되는 영역이다.
JavaScript 런타임은 처리 할 메시지 목록인 메시지 대기열을 사용합니다.
비동기적으로 이벤트 발생 시 실행해야 할 callback 함수가 Callback Queue에 추가 된다.
선입선출 방식으로 콜백 큐에 들어있는 함수들을 호출한다.
함수를 호출하면 새롭게 Call Stack 에 쌓인다.
Call Stack과 Callback Queue의 상태를 체크하여,
Call Stack이 빈 상태가 되면, Callback Queue의 첫번째 콜백을 Call Stack으로 밀어넣는다.
반복적인 행동을 틱(tick) 이라 부른다.