자바스크립트를 학습하고 있는 입장에서 가장 흔하게 보이거나 듣는 내용이 싱글스레드와 이벤트 루프이다.
개념을 보다보면, 자바스크립트는 싱글스레드 기반으로 동작하고 node.js는 이벤트 루프 기반으로 동작한다고 한다.
사실 너무 자주 들어서 암기가 되어버렸지만 구체적으로 원리에 대해서는 알지 못하였기에
이번 기회에 학습해보고 정리해보려 한다.
앞서 말한대로 자바스크립트는 싱글스레드 기반으로 동작한다.
싱글스레드란 동시에 처리할 수 있는 작업이 한가지라는 소리이며 하나씩 밖에 실행할 수 없지만, 막상 개발을 하다보면 그렇게 느껴지지 않는다. 그 이유에 대한 이유를 지금부터 정리해보려한다.
자바스크립트의 호출 스택은 단일 스레드이기에 호출 스택 또한 하나이다.
호출스택이란 코드가 실행될 때 쌓이는 곳을 말하고 스택 형태 LIFO 방식으로 쌓이게 된다.
LIFO란, Last In First Out이라는 약자로 가장 마지막에 들어온 게 가장 먼저 나가는 구조를 말한다.
메모리 할당이 일어나는 주소
Web API는 자바스크립트에서 지원하는 API가 아니라 브라우저에서 제공하는 API이면서
1) DOM
2) AJAX
3) Timeout
세가지가 존재한다.
호출 스택에서 실행된 비동기 함수를 Web API에서 처리하게 되고, Web API가 처리하는 시간에 동기 함수는 호출 스택에서 처리한다.
Web API에서 처리된 비동기 함수들은 Callback Queue로 전달된다.
비동기 함수들을 보관하는 장소로 Event Loop로 전달되기 전까지 보관된다.
Callback Queue는 FIFO 방식으로 진행되는데 앞서 말한 LIFO방식과는 다르게
먼저 들어간 순서대로 먼저 나가는 방식이다.
호출 스택과 Callback Queue를 확인해서
호출 스택이 비어 있다면, Callback Queue의 첫번째 콜백을 호출 스택으로 전달한다.