Event Loop, Call Stack, Task Queue의 역할과 동작 원리

B__m·2023년 6월 8일
0

이벤트 루프(Event Loop), 호출 스택(Call Stack), 태스크 큐(Task Queue)는 JavaScript와 같은 프로그래밍 언어에서 비동기 작업을 처리하기 위해 함께 동작하는 요소이다.

이 세 가지 요소는 비동기 작업을 조율하고 실행하는 데 중요한 역할을 한다.

콜 스택(Call Stack):

Call Stack은 함수 호출의 실행 컨텍스트를 관리하는 자료구조이다.

함수가 호출되면 해당 함수의 실행 컨텍스트가 Call Stack에 추가된다.
함수가 실행을 완료하면 Call Stack에서 제거된다.
이 때, 함수 안에서 다른 함수를 호출하면 새로운 실행 컨텍스트가 Call Stack에 추가되고, 호출된 함수의 실행이 완료되면 이전 실행 컨텍스트로 돌아간다.
Call Stack은 싱글 스레드 환경에서 동작하며, 함수의 실행 순서를 추적한다.

태스크 큐(Task Queue):

태스크 큐는 선입선출 방식(FIFO)으로 실행된다.

태스크 큐는 비동기 작업의 완료 또는 이벤트 발생과 같은 작업을 대기하는 큐이다.
비동기 작업이 발생하면 해당 작업은 태스크 큐에 넣어진다. 대표적인 비동기 작업으로는 타이머, 이벤트 처리, 비동기 함수 호출 등이 있다.
태스크 큐는 Call Stack이 비어있을 때 비동기 작업을 순서대로 Call Stack으로 이동시키는 역할을 한다.

이벤트 루프(Event Loop):

이벤트 루프는 Call Stack과 태스크 큐를 모니터링하고, Call Stack이 비어있을 때 태스크 큐에 있는 작업을 Call Stack으로 이동시킨다.
이벤트 루프는 Call Stack이 비어질 때마다 태스크 큐를 확인하고 작업을 호출 스택으로 옮기는 역할을 반복적으로 수행.
이를 통해 비동기 작업이 순차적으로 실행되고, 동시에 다른 작업을 처리할 수 있다.


일반적인 비동기 작업 흐름은 다음과 같다.

  1. 동기 코드가 Call Stack에 추가
  2. 비동기 작업이 발생하면 해당 작업은 백그라운드에서 실행되고, 그 결과는 태스크 큐에 추가
  3. Call Stack이 비어지면 이벤트 루프가 태스크 큐를 확인하고 작업을 호출 스택으로 이동
  4. Call Stack에 추가된 작업이 실행되고, 이러한 과정 반복

이러한 방식으로 Call Stack, 태스크 큐, 이벤트 루프가 협력하여 비동기 작업을 처리하고 원활한 실행 한다.

0개의 댓글