비동기 작업을 효율적으로 작업하기 위한 매커니즘
자바스크립트는 싱글 스레드 언어이므로 비동기 작업을 효율적으로 처리하기 위해 사용함
구성요소
Call Stack
자바스크립트 엔진이 현재 실행 중인 코드나 함수 호출을 관리함
함수가 호출되면 스택에 추가되고, 실행이 완료되면 스택에서 제거됨
Task Queue
비동기 작업이 완료된 후 실행 대기 상태로 큐에 저장됨
Microtask Queue
Promise.then()과 같이 중요도가 높은 작업들이 대기하는 큐
일반 Task보다 우선적으로 처리됨
Macrotask Queue
setTimeout, setInterval 같은 일반적인 비동기 작업들이 대기하는 큐
Web APIs
브라우저가 제공하는 비동기 작업 처리 기능
작동방식
EventLoop : 계속해서 CallStack을 확인하고 있으며, 콜스택이 비어 있을때, 작업을 콜스택으로 이동시킴
마이크로 테스크 큐가 우선순위를 가짐
console.log같은 간단한 로직은 콜 스택에서 자체적으로 처리함
WebAPI 기능 활용 ( Web API에 의해 타이머가 설정되고 만료되면 콜백 함수가 태스크 큐에 추가됨)
현재 실행중인 모든 동기 작업이 완료된 후에 콜백이 실행됨
Promise 작업을 처리하고 각 작업을 Task의 성질에 맞게 분배함
자체적으로 처리하는 log가 먼저 출력