이벤트 루프

김시환·2023년 3월 29일
0

javascript

목록 보기
2/4

이전 글에서
소스 코드가 평가되면 실행 컨텍스트가 생성되고, 실행 컨텍스트가 실행 컨텍스트 스택에 쌓인다. 그리고 실행 컨텍스트 스택을 통해서 코드 실행 순서를 관리한다.

이벤트 루프

자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다. -> 동시에 2개 이상의 함수를 실행할 수가 없다!! 실행 컨텍스트 스택 최상위에 있는 컨텍스트만이 실행되는 태스크 (싱글 스레드)
싱글 스레드 방식은 한 번에 하나의 태스크만 실행할 수 있다.

  • 동기 처리를 했을 때, 실행 시간이 많이 걸리는 태스크를 실행하는 경우 -> 블로킹이 발생한다
  • 비동기 처리를 하면 현재 실행 중인 태스크가 종료되지 않은 상태라 해도 다음 태스크를 곧바로 실행한다.

동기 처리는 실행 순서가 보장되지만, 블로킹 되는 단점이 있다.
비동기 처리는 블로킹이 발생하지 않지만, 실행 순서가 보장되지 않는다.

자바스크립트의 동시성을 지원하는 것이 이벤트 루프
이벤트 루프는 브라우저에 내장되어 있는 기능이다!

대부분의 자바스크립트 엔진은 크게 2개의 영역으로 구분이 가능하다

  • 콜 스택 : 실행 컨텍스트 스택
  • : 객체가 저장되는 메모리 공간, 실행 컨텍스트는 힙에 저장된 객체를 참조
    객체는 크기가 정해져 있지 않기 때문에 할당할 메모리 공간의 크기를 런타임에 동적으로 결정해야함!

비동기 처리에서 소스 코드의 평가와 실행을 제외한 모든 처리는 브라우저 또는 node.js가 담당
ex) setTimeout의 콜백 함수의 평가와 실행은 자바스크립트 엔진이 담당하지만, 타이머 설정과 콜백 함수 등록은 브라우저 또는 node.js가 담당
-> 이를 위해 브라우저는 태스크 큐이벤트 루프를 제공한다.

  • 태스크 큐 : 비동기 함수의 콜백 함수이벤트 핸들러가 일시적으로 저장됨
  • 이벤트 루프 : 콜 스택에 현재 실행중인 실행 컨텍스트가 있는지, 태스크 큐에 대기 중인 함수가 있는지 반복해서 확인 -> 콜 스택이 비어 있고, 태스크 큐에 대기 중인 함수가 있으면, 이벤트 루프는 태스크 큐에 대기 중인 함수를 콜 스택으로 이동시킨다.

브라우저와 자바스크리트 엔진이 협력하여 비동기 함수를 실행한다!!

profile
1년차 개발자입니다.

0개의 댓글

관련 채용 정보