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이 빌 때 까지) 처리할 준비가 된 어떠한 콜백함수(메시지 큐)도 대기를 해야한다.
'개발 > HTML, JS' 카테고리의 다른 글
프로토콜, 도메인, 포트, 파일(페이지)명 구하기 예제 (0) | 2018.01.15 |
---|---|
공백 사용 방지 예제 소스 (0) | 2018.01.15 |
window.opener 권한이 없습니다. (0) | 2016.11.16 |
정의되지 않음 또는 null 참조인 'value' 속성을 가져올 수 없습니다. (0) | 2016.11.16 |
& < > "   (0) | 2016.11.16 |