이벤트 루프는 자바스크립트 코드가 실행되는 자바스크립트 엔진의 백스테이지에서 동작하는 하나의 장치이다.
console.log(11111)
setTimeOut(function () {
console.log(33333)
},3000);
setTimeOut(function () {
console.log(44444)
},4000);
setTimeOut(function () {
console.log(55555)
},5000);
console.log(22222)
자바스크립트는 싱글 스레드 언어
= 콜 스택을 하나만 사용한다
= 동시에 하나의 일만 처리할 수 있다.
자바스크립트 언어는 한 번에 하나의 작업 밖에 처리하지 못 하지만 웹 브라우저는 자바스크립트 엔진 말고도 Web API, 이벤트루프, 콜백 큐를 가지고 있다.
DOM, Http 요청, setTimeOut과 같은 메소드들은 자바스크립트 엔진의 바깥에 있는 Web API에서 제공하는 메서드들이다. (비동기 메서드들은 작동을 마치고 콜백함수를 콜백 큐로 집어 넣는다)
이렇듯 자바스크립트 언어는 싱글 스레드이지만 자바스크립트가 구동되는 웹 브라우저는 멀티 스레드로 동작한다.
정확히 말하면 Web APIs가 멀티스레드이다.
그리고 자바스크립트 엔진이 webAPI와 상호연동이 되기 위해 필요한 것이 콜백큐와 이벤트 루프이다.
console.log(11111)
setTimeOut(function () {
console.log(33333)
},0); //WebAPI => 콜백큐 => 콜스택
console.log(22222)
위 코드를 보면 0초 후에 실행된다는 말은 문맥상으로 즉시실행 된다는 말 같지만 이벤트 루프가 동작하는 조건인
호출 스택이 비어 있지 않으므로 22222 까지 출력 후 이벤트루프에 의해 콜백 큐에서 콜스택으로 이동 후 출력이 되게 된다.
이벤트 루프
콜백 큐에 있는 콜백함수들을 콜 스택으로 이동시키는 하나의 장치이다.