브라우저의 동작 원리를 공부하다가, 이벤트 루프와 v8 엔진의 관계에 대해 명확히 정리하기 위해 작성되었습니다.
이벤트 루프와 V8 Engine의 관계
- 이벤트 루프는 V8 엔진을 포함하는 관계임 (이벤트 루프 ⊃ V8 engine)
- 이벤트 루프는 task queue를 가지고 있으며, 만약 task가 javascript를 실행해야 하는 일이면 그 경우 V8과 같은 자바스크립트 엔진을 가져다 사용함
V8 엔진 내부에 있는 개념들
- 자바스크립트를 실행하는데 필요한 것들이 존재한다고 보면 됨
- javascript call stack
- Execution context
- Heap - Garbage Collection
- Memory allocation (for javascript objects)
V8 엔진 외부에 있는 개념들
- event loop
- task queue, 다른 이름으로는 macrotask queue
- microtask queue, 다른 이름으로는 PromiseJobs
- web APIs - setTimeout(), fetch(), DOM 조작 ... (전부 javascript 안에서 부를 수 있지만, 실제 실행은 V8 엔진 외부에서 다른 언어로 브라우저에서 실행됨. web APIs 는 단지 연결 통로라고 생각하면 됨)
- 추가 - setTimeout 같은 몇몇 api는 이제 V8 자체에서 지원하기 시작하였음 (2020년 12월 기준)
reference
v8 engine
event loop의 html standard
이벤트 루프는 자바스크립트 엔진 내부에 있는 것이 아니다
Does V8 have an event loop?