이벤트 루프

Jean·2025년 2월 21일

면접 질문 복습을 해봅시다...

이벤트 루프란 무엇일까

자바스크립트는 싱글 스레드다. 한 번에 한가지 코드를 읽는다는 뜻이다
그렇다면 브라우저에서 서버로 요청을 보낼때 답이 오기전까지는 브라우저가 멈춰야하는데 그렇지 않다. 왜일까? 너무 빨라서?

답은 비동기, 논블로킹을 이용하기 때문이다.

위의 코드를 실행시키면

hi

JSConfEU

//- 5초 후 

there

이렇게 출력될 것이다.

자바스크립트는 싱글 스레드 아닌가요? -> 맞습니다
한 번에 하나의 코드를 실행하지 않나요? -> 맞습니다

그럼 어떻게 이런일이 가능할까요?

브라우저와 Node.js같은 것들이 webAPI와 같은 것들을 제공합니다
이것들이 자바스크립트에게 동시성 비슷한걸 제공해줍니다


다시 위의 코드를 실행시키면

console.log('hi') 이후
setTimeout을 실행합니다
setTimeout은 webAPI로 넘어갑니다 임시 저장소에서 타이머를 켜고 기다리는거죠

함수의 호출자체는 끝났기 때문에 스택에서는 사라지고 다음 코드를 실행합니다
console.log('JSConfEU')가 나오겠지요?

setTimeout의 타이머가 끝나면
webAPI에서 스택으로 코드를 보내줄까요?

아니요 webAPI는 작성된 코드에 갑자기 끼어들 수 없습니다.

여기서 새로운 친구가 등장하는데요
바로 테스크 큐 또는 콜백 큐라고 불리는 친구입니다.

webAPI는 작업이 완료되면 콜백을 테스크 큐에 넣어둡니다
그리고 이번 주제인 이벤트 루프가 나옵니다

이 시스템에서 이벤트 루프는 단순한 일을 합니다

이벤트 루프의 역할은 콜 스택과 테스크 큐를 주시하는 것입니다

스택이 비어있으면 큐의 첫번째 콜백을 스택에 쌓아줍니다.

그리고 'there'을 출력합니다.

출처: Philip Roberts | JSConf EU

profile
햇내기 개발자 지망생

0개의 댓글