holdanddeepdive/javascript-deep-dive

42장 비동기 프로그래밍

Opened this issue · 0 comments

동기 처리, 비동기 처리

  • 콜 스택과 메모리 힙은 자바스크립트 엔진의 영역임
  • 이벤트 루프와 태스크 큐는 브라우저 환경이 제공함
    • 호출 스케쥴링(타이머 설정, 콜백 함수 등록)은 브라우저/Node.js가 담당

자바스크립트 엔진 => 싱글 스레드, 동기 처리

  • 자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 가짐
  • 함수를 실행할 수 있는 창구가 하나라는 뜻
  • 실행 컨텍스트 스택의 최상위 요소(실행중인 실행 컨텍스트)를 제외한 나머지는 모두 task들임
  • 기본적으로 동기처리 하기 때문에 순서보장되지만 블로킹이 일어날 수 있음

이벤트 루프와 태스크 큐 => 비동기 처리를 가능하게 함

  • 이벤트 루프는 브라우저 내장 기능
  • 자바스크립트 엔진이 실행 컨텍스트를 관리하는 동안 브라우저는 타이머를 설정하고 타이머의 만료를 기다림. 지연 시간이 지나면 해당 태스크를 태스크 큐에 푸시한다.(콜 스택의 실행 컨텍스트들이 실행되는 동안 대기열에서 기다림)
  • 태스크 큐에서 대기 중인 태스크가 콜 스택에 푸쉬 되려면 콜 스택이 비어있어야 함
  • 콜 스택이 비면 이벤트 루프가 감지하고, 태스크 큐에서 대기중인 태스크를 콜 스택에 푸쉬함

스레드 구분

  • 자바스크립트 엔진 => 싱글 스레드
  • 브라우저 => 멀티 스레드