Search
😄

이벤트루프 동작 원리

1.
콜스택에 있는 코드 실행
2.
setTimeout, Promise 등 Web API 사용 시 Web APIs로 이동
3.
Web API는 API 작업 각각마다 스레드를 가지고 있음. 작업이 완료되면 콜백 큐(task queue)에 콜백을 넣음
4.
콜스택에 모든 함수가 비워지면 micro task queue - (macro) task queue 순서대로 콜스택에 콜백 함수를 넣어서 실행 (micro task queue는 브라우저 렌더링보다 더 먼저 처리된다.)
5.
requestAnimationFrame queue은 브라우저 repaint 이전 단계에서 실행됨
micro가 macro보다 실행 순서가 빠름. (micro - promise, mutation ovbserver 등, macro - setTimeout 등)
await의 경우.
let x = await bar();// bar() 함수 정의는 생략 console.log(x); console.log('Done');
JavaScript
복사
Copy위의 코드는 사실 다음과 같은 코드와 같은 의미를 가진다.
bar().then(x => { console.log(x); console.log('Done'); });
JavaScript
복사
즉, await 키워드 다음에 나오는 동일 라인의 코드들은 모두await bar() 의then 핸들러의 콜백 함수로 들어간다는 뜻이다.
Plain Text
복사
만일 MicroTask Queue를 사용하는 Promise 코드나 Mutation Observer 의 콜백에서 무한 루프 까지는 아니더라도 지나치게 MicroTask Queue에 콜백을 지나치게 적재하는 작업이 있다면 이를 조심히 다루어야 한다
JavaScript
복사
micro task queue가 비워지지 않으면 여기에서 병목이 생기면서 다른 이벤트 콜백이나 macro task queue 실행이 안되기 때문