Event Loop

이재홍·2022년 6월 19일
0

Basic JS

목록 보기
10/18

자바스크립트는 단일 스레드 기반의 언어로 한 순간 하나의 작업만을 처리할 수 있다
자바스크립트는 비 동기로 동작하기 때문에 단일 스레드에도 불구하고 동시에 많은 작업을 수행한다

근데 JS언어 자체가 비동기 동작을 지원하는 것은 아님

비 동기로 동작하는 핵심요소는 자바스크립트 언어가 아니라 브라우저가 가지고 있다.

브라우저는 Web APIs, Event Table, Callback Queue, Event Loop 등으로 구성되어 있음
JS 코드가 실행될 때 브라우저와의 동작은 위의 그림으로 표현할 수 있다.

Heap: 메모리 할당이 발생하는 곳
Call Stack : 실행된 코드의 환경을 저장하는 자료구조, 함수 호출 시 Call Stack에 push 됩니다. (Call Stack에 대한 자세한 설명은 여기)
Web APIs: DOM, AJAX, setTimeout 등 브라우저가 제공하는 API
Callback Queue, Event Loop, Event Table ...

setTimeout(function exec() {
  console.log('second')
}, 1000);

Web APIs: setTimeout이 Call Stack에 들어와 실행되면 Browser API인 timer를 호출

Event Table: 특정 event(timeout, click, mouse move 등등)가 발생했을 때 어떤 callback 함수가 호출되야 하는지를 알고 있는 자료구조입니다. 위 코드에서 호출된 timer가 종료되면 event가 발생하게 되는데 이때 exec callback 함수가 실행되어야 한다는 것을 Event Table이 알고 있다

Callback Queue: 이벤트 발생 시 실행해야 할 callback 함수가 Callback Queue에 추가됨

Event Loop: Event Loop의 역할은 간단
1. Call Stack과 Callback Queue를 감시합니다.
2. Call Stack이 비어있을 경우, Callback queue에서 함수를 꺼내 Call Stack에 추가 합니다.

자바스크립트를 단일 스레드 프로그래밍 언어라 한번에 하나씩 밖에 실행할 수 없다.
그러나 Web API(Background), Callback Queue(Task Queue), Event Loop 덕분에 멀티 스레드 처럼 보여진다.

https://velog.io/@dami/JS-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A3%A8%ED%94%84Event-Loop-%ED%83%9C%EC%8A%A4%ED%81%AC-%ED%81%90Task-Queue

0개의 댓글