자바스크립트 setTimeout은 어떻게 작동하는가?

2020. 5. 1. 01:18JavaScript

How does setTimeout work in JavaScript?

 

출처:

https://stackoverflow.com/questions/22051209/how-does-setinterval-and-settimeout-work

 

setTimeout의 작동 원리가 어떻길래 이게 비동기적인 처리방식이 되는지 궁금해서 찾아봄.

 

 

자바스크립트는 싱글스레드 기반으로 동작하지만, 웹브라우저는 그렇지 않다. 웹브라우저는 최소 3개의 스레드를 갖고있다.

 

1. JavsScript engine thread

2. UI trhead

3. Timing thread

(참고로 setTimeout, setInterval 같은 time-consuming 함수들은 웹브라우저어의 API 중 하나인 TIME API에 속함)

 

setTimeout과 setInterval은 Timing thread에 의해서 처리된다.

이 두 함수가 호출되면, Timing thread는 설정된 시간이 되면 JavaScript engine thread의 execution stack에 콜백함수를 올린다. 그 stack에 이미 먼저 대기중인 작업들이 있다면, 그 작업들이 완료되기 전까지는 이 콜백함수가 실행되지 않는다.

그러므로, 자바스크립트 stack에 다른 time-consuming 함수들이 먼저 대기중이라면, 내가 실행하고자 하는 setTimeout의 콜백함수는 제때 완료되지 않을 수 있다.