JS (비동기 프로그래밍 , 이벤트 루프 & 테스크 큐)

곽지욱·2024년 8월 20일

JS

목록 보기
5/11

비동기 프로그래밍

  • Javascript는 기본적으로 싱글 스레드 언어 이다. '싱글' 스레드라 한 번에 하나의 작업만 수행이 가능하다.

  • 멀티 스레드를 지원하여 원하는 코드 로직을 동시에 수행 시키는 멀티 작업이 가능한 Java 나 Python 과는 다른 것

  • 하지만 당연히 웹 애플리케이션에서는 네트워크 요청이나 이벤트 처리, 타이머와 같은 작업은 멀티 (병렬) 처리되어야 한다. 만일 싱글 스레드로 브라우저 동작이 한번에 하나씩 수행하게 되면, 우리가 파일을 다운로드 받을 동안 브라우저는 파일을 다 받을 때 까지 정지하게 됨..

  • 따라서 파일 다운, 네트워크 요청, 타이머, 애니메이션 이러한 시간이 소요되고 반복적인 작업들은 JS 엔진이 아니라 브라우저 내부의 멀티 스레드인 Web APIs 에서 비동기적으로 처리된다.

  • 즉, 비동기로 동작하는 핵심요소는 JS 언어가 아니라 브라우저라는 소프트웨어가 가지고 있다고 보면된다.

이벤트 루프 (Event Loop)

  • 이벤트 루프는 비동기 작업이 처리되는 어떠한 메커니즘을 의미한다. 싱글 스레드 환경에서 이벤트 루프는 자바스크립트와 같은 비동기 프로그래밍 언어에서 매우 중요하게 작용한다.

  • 자바스크립트의 작업을 멀티 스레드로 돌려 작업을 동시에 처리시키게 한다던가, 또는 여러 작업 중 어떤 작업을 우선으로 동작시킬 것인지 결정하는 컨트롤을 하기 위해 존재하는 것이 이벤트 루프인 것이다.

  • 위 그림을 참고하여 이벤트 루프와 테스크 큐 에 개념에 대해서 설명할 수 있다.

  • 이벤트 루프는 브라우저 내부의 Call Stack, Task Queue , Web APIs 등의 요소들을 모니터링 하면서 비동기적으로 실행되는 작업들을 관리하고 이를 순서대로 처리하여 프로그램의 실행 흐름을 제어하는 녀석이다.

  • 간단하게 말하면 브라우저의 동작 타이밍을 제어하는 관리자 라고 보면된다.

  • 여기서 콜 스택(Call Stack) 이란 함수가 호출될 때 그 함수가 실행되는 환경(컨텍스트)이 스택에 추가되는 공간을 말한다.

  • 테스크 큐(Task Queue) 는 비동기 작업의 콜백 함수들이 대기하는 큐 공간을 말한다. WebAPIs에서 진행되는 비동기 작업이 완료되면 해당 작업의 콜백이 테스크 큐에 추가된다.

  • 이벤트 루프 는 콜 스택이 비어있을 때 테스크 큐에 있는 작업을 콜 스택으로 이동시켜 실행한다. 이러한 과정을 통해 비동기 작업이 실행되는 것.

0개의 댓글