본문 바로가기

자바스크립트

[Javascript] 자바스크립트 엔진의 작동방식에 관하여

 

필자는 최근 자바스크립트의 작동방식에 대해 공부하여 나름대로 느낀 점들을 서술하고자 한다.

틀린 점이 있다면 언제든 가감없이 태글 걸어주시길 바란다.

 

우선, 자바스크립트는 싱글 스레드 언어이다.

싱글 스레드라는 말은 자바 스크립트의 콜 스택은 한번에 한가지의 작업만을 수행할 수 있다는 것이다. 

필자는 여기서 궁금증이 생겼다. 그렇다면 비동기로직은 어떤 방식으로 수행이 되는거지?

 

여기서 이벤트 루프(Event Loop) 라는 개념을 접하게 되었다. 

그렇다면 이벤트 루프는 뭘까? 필자가 이해한 이벤트 루프는 자바스크립트에는 우리가 적은 코드를 담는 일반적인 콜스택(Call Stack)과 비동기관련 로직(setTimeout, 데이터 관련 로직 등)을 담아두는 테스크 큐(Task Queue)가 존재한다는 것이다. 스택과 큐가 무엇인지에 대해서는 안다고 가정하고 넘어가겠다.

 

그래서 정확히 어떻게 작업이 이루어지는 걸까?

이에 관해 필자가 이해한 것은 다음과 같다

1. 자바스크립트는 콜스택이 비어있을때까지 계속 콜 스택 내부에 있는 로직을 꺼내어 작동시킨다

2. 만약 콜스택이 비어있다면 테스크 큐에 대기중인 비동기 로직을 콜 스택으로 끌어올려 작동시킨다

이러한 이벤트 루프를 통해 자바스크립트는 싱글 스레드이지만 멀티 스레드와 같은 효과를 낼 수 있다고 필자는 이해했다.