Front-end/JavaScript
JS 비동기 7편 - job queue
파리외 개발자
2023. 4. 26. 22:08
콜백 큐
JS 동작원리 5편 - 런타임 (Event Loop, Callback Queue, 비동기)
지금까지 JS가 V8엔진을 통해 어떻게 기계어로 번역되고 실행되는지 알아봤다. 하지만 JS가 브라우저에서 동작할 때는 다른 얘기가 된다. Node.js 위 사진은 노드 js의 전체 시스템 아키텍처이다. JS
developefeel.tistory.com
콜백 큐에 대한 기본적인 내용을 알고 있다는 전제하에 글 작성을 한다.
콜백 큐에는 세 종류의 큐가 있는데,
Task Queue, Job Queue, Animation Frame이다.
Task Queue
//1 Callback Queue - Task Queue
setTimeout(() => {
console.log("1");
}, 0); //not js, web api
setTimeout(() => {
console.log("2");
}, 10);
//3
console.log("4");
setInterval, setTimeout 등이 해당 큐에 속한다.
콜 스택에 담긴 콘솔출력이 4로 먼저 출력되고,
이후에 Task Queue를 실행시킨다.
Job Queue
//1 Callback Queue - Task Queue
setTimeout(() => {
console.log("1");
}, 0); //not js, web api
setTimeout(() => {
console.log("2");
}, 10);
//2 Job Queue - Microtask Queue
Promise.resolve("hi").then((data) => console.log("3", data));
//3
console.log("4");
비동기 함수인 promise 또한 콜백 큐에 담기지만
큐의 종류가 다르다.
콜 스택이 먼저 실행된 후,
promise가 먼저 실행되는 것을 볼 수 있다.
그리고 이후 setTimeout이 실행된다.
콜백 큐의 우선순위
위 결과에서 볼 수 있듯이(animation은 이 글에서 다루지 않았지만)
세 개의 큐의 우선순위는
Job Queue >>> Animation Frame >>> Task Queue
가 된다.