본문 바로가기
개발 언어/자바스크립트 33가지 개념

[JavaScript 33가지 개념] 09. 메시지 큐와 이벤트 루프

by 우주다람쥐 2023. 3. 12.
반응형

JavaScript는 단일 스레드 언어이므로 한 번에 하나만 실행할 수 있다.
그러나 다른 코드가 계속 실행되는 동안 코드가 백그라운드에서 실행될 수 있는 비동기 프로그래밍도 지원한다.
이는 JavaScript의 두 가지 주요 기능인 메시지 큐와 이벤트 루프 때문에 가능하다.

 

1. 메시지 큐

메시지 큐는 처리해야 하는 메시지(또는 작업)의 목록이다. 
대기열의 각 메시지는 메시지가 처리될 때 실행될 함수와 연결된다.
메시지는 대기열에 추가된 순서, 즉 FIFO(First In, First Out) 순서대로 실행된다.

 

2. 이벤트 루프

이벤트 루프는 대기열의 메시지 처리를 담당한다. 아래의 과정을 반복한다.


백그라운드에서 계속 실행되어 처리할 새 메시지의 대기열을 확인한다. > 메시지가 발견되면 관련 기능이 실행된다.

 

이벤트 루프는 계속 실행되어 처리할 메시지가 더 이상 남지 않을 때까지 새 메시지의 대기열을 확인한다.

 

3. 예시

console.log("Start");
setTimeout(() => {
  console.log("3 seconds have passed");
}, 3000);
console.log("End");


/* 출력 결과
Start
End
3 seconds have passed
*/

위의 예에서 console.log 문은 동기식으로 실행되고 호출 스택에 추가된다.
setTimeout 함수를 만나면 메시지 큐에 추가된다.
console.log("End") 문이 실행된 후 호출 스택이 비어 있고 이벤트 루프가 메시지 큐를 확인한다.
setTimeout 메시지를 찾고 지정된 지연 후에 콜백 함수를 호출 스택에 추가한다.

이제 메시지 대기열이 비어 있고 이벤트 루프가 계속 실행되어 새 메시지를 확인한다.

 

요약하면 메시지 대기열과 이벤트 루프는 JavaScript가 비동기 코드 실행을 처리하는 방법을 이해하는 데 중요한 개념이다.
메시지 큐는 실행 대기 중인 메시지를 저장하고 이벤트 루프는 메시지 큐를 지속적으로 확인하고 호출 스택이 비어 있으면 큐의 다음 메시지를 실행한다.

 

 

반응형

댓글