요청한 작업에 대해 순서가 지켜지는 것
요청한 작업에 대해 순서가 지켜지지 않을 수 있는 것
블로킹이란?
요청에 대한 결과를 기다리도록 하는 것
논 블로킹이란?
요청에 대한 응답을 기다리지 않고, 다음 작업을 바로 수행하는 것
I/O 작업과 같은 느린 작업이 발생할 때, 기다리지 않고 다른 작업과 동시에 처리하여 시스템 성능을 향상시킬 수 있다.
스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘이다.
식별자와 스코프는 렉시컬 환경으로 관리하고, 코드 실행 순서는 실행 컨텍스트 스택으로 관리한다.
실행 컨텍스트는 힙에 저장된 객체를 참조한다.
식별자, 식별자에 바인딩된 값, 상위 스코프에 대한 참조를 기록하는 자료구조
자바스크립트 엔진은 하나의 실행 컨텍스트 스택을 갖는다. 따라서 한 번에 하나의 태스크만 실행하는 싱글 스레드 방식으로 동작한다.
하지만 자바스크립트를 실행해보면, 여러 태스크를 동시에 처리되는 것처럼 보인다.
이는 브라우저가 멀티 스레드로 동작하기 때문이다. 비동기 처리에서 소스코드의 평가와 실행을 제외한 모든 처리는 브라우저가 담당한다.
이를 위해 브라우저는 이벤트 루프와 콜백 큐를 제공한다.
브라우저에 내장되어 있는 자바스크립트 엔진은 콜 스택과 힙으로 구성되어 있다.
서버에게 리소스를 요청하거나 파일 입출력 혹은 타이머 대기 작업을 실행하는 Web APIs는 멀티 스레드다.
(각 API마다 스레드가 할당되어 있다)
이벤트 루프는 작업을 옮기는 역할을 한다.
비동기 코드를 Web API에 옮기고, 작업이 완료되면 콜백 함수를 콜백 큐에 적재하고, 콜 스택이 비면 콜 스택에 적재시킨다.
콜 스택 = 호출 스택
콜백 큐 = 이벤트 큐 = 태스크 큐 + 마이크로태스크 큐
태스크 큐
비동기 함수의 콜백 함수, 이벤트 핸들러가 일시적으로 보관되는 영역
마이크로태스크 큐
프로미스의 후속 처리 메서드의 콜백 함수가 일시적으로 보관되는 영역.
태스크 큐보다 우선순위가 높다.