JS 비동기 코드 작동 원리 - 이벤트루프(Event Loop)

JY·2021년 6월 3일
0

단일 스레드 언어

  • JS언어는 단일 스레드 언어이다.

  • JS 엔진은 콜 스택이 하나이다. 즉, 한번에 두개 이상의 코드를 처리할 수 없다.


JS 엔진

  • JS 엔진이란, JS 코드를 해석(인터프리팅)하고 실행하는 프로그램 혹은 인터프리터이다.

  • JS 코드가 실행되는 환경을 런타임이라고 한다.

  • 실행 환경에 따라 사용되는 JS 엔진이 다르다. (ex. 크롬 V8엔진)
    - 자바스크립트 엔진 종류


콜 스택(Call Stack)

  • 콜 스택이란, 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 대한 정보를 저장(기록)하는 스택 자료구조이다.

  • 실행 스택(execution stack), 제어 스택(control stack), 런 타임 스택(run-time stack), 기계 스택(machine stack), 스택(the stack) 으로 불린다.


메모리 힙(Heap)

  • 힙은 거의 구조화되지 않은 영역(unstructured)의 메모리이다.

  • 객체들은 힙 내부에 할당되고, 변수와 객체들의 모든 메모리 할당이 여기서 일어난다.


동기 / 비동기

  • 동기(syncronous) : 요청을 보내고 응답을 받기 전까지 다음 동작을 실행하지 않음

  • 비동기(asyncronous) : 요청을 보내고 응답 여부에 상관없이 다음 동장을 실행

  • JS는 동기적인 프로그래밍 언어이다.


Web API

  • JS 엔진은 JS 코드를 비동기적으로 실행할 수 있는 Web API를 지원한다.

  • Web API란, DOM events, http request, setTimeout과 같은 비동기 이벤트들을 다루며, 브라우저 내부에 C++로 구현되어 만들어졌습니다.

  • 콜백함수를 콜백 큐에 넣는 역할을 한다.


콜백 큐(Callback Queue)

  • 콜백 큐란, JavaScript 런타임이 처리 할 메시지 목록이다.

  • 콜백 큐의 내부에는 여러가지 큐(queue)가 있고, Web API의 종류에 따라 다른 큐로 이동한다.

  • 각각의 우선순위가 정해져 있다.
    1.Microtask Queue
    2.Animation Frames
    3.Task Queue


이벤트루프

  • 이벤트 루프는 실행 컨텍스트와 콜백 큐를 감시한다.

  • 스택이 완전히 비었을 때 선입선출 방식으로 콜백 큐의 함수들을 호출하고 콜 스택에 쌓는다.

0개의 댓글