NodeJs, 자바 스크립트 이벤트 루프(Event Loop) 이해하기

devdo·2021년 12월 10일
0

NodeJS

목록 보기
2/2
post-thumbnail

NodeJS를 공부하기 앞서 자바스크립트의 이벤트 루프 개념을 알아야 한다고 해서 정리하고 간다.

NodeJS는 이벤트 기반 모델이라고 한다.

Event Loop란?

Event Loop는 이벤트 발생시 호출할 콜백 함수(Callback stack)들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 한다.
노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 하는 것이다.

잘 모르겠다..
호출된 콜백 함수을 관리한다는 것부터 헷갈린다. 아래 그림으로 이해해보자.

JS Engine

자바스크립트 엔진은 Memory HeapCall Stack 으로 구성되어 있다.
가장 유명한 것이 구글의 V8 Engine이다.
자바스크립트는 단일 스레드 (sigle thread) 프로그래밍 언어인데,
이 의미는 Call Stack이 하나 라는 이야기이다.

Event Loop

Event Loop는 Call Stack과 Callback Queue의 상태를 체크하여,
Call Stack이 빈 상태가 되면, Callback Queue의 첫번째 콜백을 Call Stack으로 밀어넣는다.
이러한 반복적인 행동을 틱(tick) 이라 부른다.

Web API

Web API 는 브라우저에서 제공하는 API 로, DOM, Ajax, Timeout 등 이벤트 리스너들이 대기하는 곳이다. 자바스크립트가 아니고 다른 언어로 작성된 프로그램이라고 봐도 무방하다. '백그라운드'라고 표현하기도 한다.
Call Stack에서 실행된 비동기 함수는 Web API를 호출하고,
Web API는 콜백함수를 Callback Queue에 밀어 넣는다.

Callback Queue

비동기적으로 실행된 콜백함수(Callback stack)를 보관 하는 영역이다.
정해진 순서대로 콜백함수들이 줄을 서 있으므로 콜백 큐라고 부른다. 콜백함수들은 보통 완료된 순서대로 줄을 서지만 특정한 경우에는 순서가 바뀌기도 한다.


자바스크립트는 단일 스레드언어이다. 여기서 연관되서 생각될 수 있다.
단일스레드 언어라 한번에 하나씩밖에 실행할 수 없다.
실제로는 한가지 일만 하지만 그말에 무색하게 자바스크립트는 비동기적으로 여러가지 일을 처리하는 함수들을 사용한다. 그래서 Node.js가 Non-blocking I/O를 처리하는 데도 최적화된 플랫폼이기도 하다.
그리고 이 모든 것이 가능한 이유는 이벤트 루프가 있기 때문이다!


이는 Nodejs가 `멀티스레딩처럼 보이는 이유`이기도 하다.

Nodejs가 멀티스레딩하는 작업은 다음 블로그에서
잘 설명해준다. 참고하길!
: https://yceffort.kr/2021/04/nodejs-multithreading-worker-threads



참고

profile
배운 것을 기록합니다.

0개의 댓글