← 질문 목록
#367깊이 0

이벤트 루프는 두 태스크 큐를 어떤 기준으로 처리하는가?

언어 · 런타임

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

마이크로태스크 큐를 완전히 비운 뒤에 매크로태스크를 하나씩 처리하기 때문이다.

  1. 동기 코드→마이크로태스크 큐

    Promise 콜백 등을 등록

  2. 동기 코드→매크로태스크 큐

    setTimeout 콜백 등을 등록

  3. 콜 스택 비움→마이크로태스크 큐

    큐가 빌 때까지 모든 태스크 실행

  4. 마이크로태스크 비움→렌더 트리

    화면 갱신이 필요하면 렌더링 수행

  5. 렌더링 완료→매크로태스크 큐

    가장 오래된 태스크 하나만 실행

Promise.then 콜백은 마이크로태스크로 분류한다. 반면 setTimeout이나 setInterval은 매크로태스크로 분류한다. 이벤트 루프는 동기 코드가 끝나고 콜 스택이 비면 마이크로태스크 큐를 먼저 본다.

마이크로태스크 큐는 비워질 때까지 제어권을 넘기지 않는다. 실행 중에 새로 들어온 마이크로태스크도 즉시 실행한다. 이 작업이 끝나야 브라우저가 화면을 다시 그린다.

매크로태스크는 매 주기마다 하나씩만 꺼내 실행한다. 실행을 마치면 다시 마이크로태스크 큐를 확인한다. 태스크 종류에 따라 렌더링 차단 여부가 결정된다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

이벤트 루프는 두 태스크 큐를 어떤 기준으로 처리하는가?