← 질문 목록
#367깊이 0
이벤트 루프는 두 태스크 큐를 어떤 기준으로 처리하는가?
언어 · 런타임
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
마이크로태스크 큐를 완전히 비운 뒤에 매크로태스크를 하나씩 처리하기 때문이다.
동기 코드→마이크로태스크 큐
Promise 콜백 등을 등록
동기 코드→매크로태스크 큐
setTimeout 콜백 등을 등록
콜 스택 비움→마이크로태스크 큐
큐가 빌 때까지 모든 태스크 실행
마이크로태스크 비움→렌더 트리
화면 갱신이 필요하면 렌더링 수행
렌더링 완료→매크로태스크 큐
가장 오래된 태스크 하나만 실행
Promise.then 콜백은 마이크로태스크로 분류한다. 반면 setTimeout이나 setInterval은 매크로태스크로 분류한다. 이벤트 루프는 동기 코드가 끝나고 콜 스택이 비면 마이크로태스크 큐를 먼저 본다.
마이크로태스크 큐는 비워질 때까지 제어권을 넘기지 않는다. 실행 중에 새로 들어온 마이크로태스크도 즉시 실행한다. 이 작업이 끝나야 브라우저가 화면을 다시 그린다.
매크로태스크는 매 주기마다 하나씩만 꺼내 실행한다. 실행을 마치면 다시 마이크로태스크 큐를 확인한다. 태스크 종류에 따라 렌더링 차단 여부가 결정된다.