이벤트 루프는 환경마다 다를까?

Javascript의 모든 코드는 이벤트 루프에서 처리된다. 그리고 Node.js의 이벤트 루프 구현체로 libuv가 사용 된다는 사실은 널리 알려져 있다. 그런데 이상하지 않은가?

왜 Node.js를 설명할 때 이벤트 루프의 구현체라며 따로 소개하는 걸까?

과연 브라우저 상의 이벤트 루프와 Node.js의 이벤트 루프는 동일하다고 생각해도 될까?

이벤트 루프 구현체가 다르다는 것을 어떻게 생각하면 좋을까?


원인은 환경 차이

이벤트 루프의 처리 방식은 스펙으로 결정돼있지만 벤더마다 약간씩 다르게 구현하는 부분이 있다고 한다. Node.js 또한 예외는 아니다.

기능 브라우저 NodeJs
File, Network I/O No Yes
Event의 종류 Mouse, Keyboard Events File, Network I/O
이벤트 루프 구현체 libevent (크롬 기준) libuv
자바스크립트 엔진 V8 (크롬 기준) V8
process.nextTick (process 모듈 자체 API) No Yes
setImmediate (ECMA 표준 아님) No Yes

위 표 이외에 처리 순서의 차이가 약간 있긴 하지만 Node v11부터는 그 차이마저 적은 편이다.

결론: 환경의 차이 때문에 약간의 구현 상의 차이가 있다 정도로 받아들이자.

출처: JavaScript Event Loop vs Node JS Event Loop

이벤트 루프는 환경마다 다를까?

https://jsqna.com/js-event-loop-browser-vs-node/

Author

Seongbin Kim

Posted on

21-01-15

Updated on

21-01-19

Licensed under

댓글