자바스크립트 엔진

wisdom·2022년 6월 6일
0

싱글 쓰레드기반(자바 스크립트의 메인 쓰레드인 이벤트 루프가 싱글 쓰레드이기 때문, 다만 웹브라우저나 NodeJS같은 멀티 쓰레드 환경에서 실행된다)이다.
크롬은 자바스크립트 엔진으로 V8을 사용한다.

  • Memory Heap
    • 메모리 할당이 일어나는 곳
      • Heap: 구조화되지 않은 넓은 메모리 영역
        • 객체(변수, 함수 등)들이 담긴다.
  • Call Stack
    • 실행될 코드의 한 줄 단위로 할당
  • Web APIs: 비동기 처리를 담당한다.
  • Callback Queue
    • 콜백큐 내부에 Task Queue(Event Queue)[SetTimeout이 담기는 곳], Microtask[Promise가 담기는 곳], Queue(Job Queue), Animation Frames가 존재한다.
    • 비동기 처리가 끝난 후 실행되어야 할 콜백 함수가 차례 로 할당된다.
  • Event Loop
    • Queue에 할당된 함수를 순서에 맞춰 Call Stack에 할당해준다.
    • 이벤트 루프는 콜백큐 내부에서 Microtask Queue > Animation Frames > Task Queue 순으로 탐색한다.


console.log("시작");

setTimeout(function () {
    console.log("중간");
}, 0);

Promise.resolve()
    .then(function () {
            console.log("프로미스")
        }
    );

console.log("끝");

// 시작 -> 끝 -> 프로미스 -> 중간

Promise는 '동기' 방식으로 동작하는데 .then을 만나면 '비동기'로 동작을 하게 된다.

V8 엔진 작동 방식

  • JIT(Just In Time) 컴파일 기법
    • 소스코드를 컴파일링과 컴파일링 된 코드 실행을 따로 하지 않고 동시에 진행하는 기법이다.
    • 코드를 실행하는 시점에서 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하는 방법과 실행하기 전에 프로그램 코드를 기계어로 번역하는 방법을 혼합한 방식이다.
    • 실행 시점에서 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글