728x90

Javascript의 Event loop는 call stack(콜스택)과 message queue(메시지 큐)로 이루어져 있다.


Event Loop란? 콜 스택과 메시지 큐를 함께 동작하도록 하는 것.


The Call Stack (추상적인 개념)

특징

- 단일 스레드 : 스레드는 CPU 사용의 기본 단위입니다낮은 레벨의 OS 구조는 스레드 ID, 프로그램 카운터레지스터 세트 및 스택으로 구성됩니다자바 스크립트 엔진 자체가 동안이 호출 스택은 단일 스레드가 한 번에 실행 코드의 한 조각을 허용하고있어 멀티 스레드.

- 동기식 : JavaScript 호출 스택은 작업 전환 대신 작업을 완전히 완료합니다이벤트도 마찬가지입니다. ECMAScript 또는 WC3 사양에서는 요구 사항이 아닙니다하지만 window.alert()현재 실행중인 작업을 중단하는 것과 같은 몇 가지 예외가 있습니다.

- 논블로킹 : 블로킹은 스레드가 실행될 때 응용 프로그램 상태가 일시 중단 될 때 발생합니다브라우저는 논블로킹 (non-blocking)으로즉시 실행되지 않을지라도 마우스 클릭과 같은 이벤트를 수락합니다.

 

역할

- LIFO로 구성, push와 pop의 기능을 수행

- 함수가 실행되면 새로운 프레임이 스택에 push된다.

- 그 프레임은 지역 변수파라미터호출 함수의 리턴 주소를 저장되어 사용된다.

- 만약 함수 a가 함수 b를 호출하면함수 b의 프레임이 함수 a의 프레임 위에 스택으로 push된다.

- 함수 b가 완전히 처리되었을 때프레임은 pop되고해당함수의 저장된 리턴 주소에서 실행이 계속된다.

 

 

 

The Message Queue

- 이벤트 처리를 위한 메시지 큐를 갖는다.

- 이벤트가 연관된 핸들러(콜백함수)를 갖고 있다면이 이벤트가 발생했을 때 새로운 메시지가 메시지 큐에 추가된다.

- 콜 스택이 비면 메시지는 메시지 큐에서 콜 스택으로 이동한다.

 

 

 Javascript : non-blocking / single-threaded

위와 같은 2가지 특징에 의해 함수가 일단 시작하면인터럽트 할 수 없다.(call stack이 빌 때 까지) 처리할 준비가 된 어떠한 콜백함수(메시지 큐)도 대기를 해야한다

+ Recent posts