톨머프
387
2021-01-19 16:08:50
1
121

이벤트루프와 task queue관련 질문입니다


js의 이벤트 루프에 대해서 공부하던 중 궁금증이 생겼습니다.

이벤트 루프는 자바스크립트 엔진과 그 실행환경을 연동시켜준다고 알고 있는데, js실행환경이 브라우저라면 이벤트루프는 브라우저에 위치해있는 것인가요??

추가적으로 자바스크립트 엔진에는 호출스택과 힙이 있는 것으로 알고 있습니다. 그러면 비동기가 실행이 끝나면 위치하게 되는 task queue도 브라우저에 위치해있는 것인가요??

요약하면 자바스크립트엔진에는 호출스택과 힙이 있고, 실행환경이 브라우저일 경우 이벤트루프와 taskqueue는 브라우저에 위치하며, 요청이 끝나서 taskqueue에 있는 task를 이벤트 루프가 호출스택에 넣어준다. 라고 보면 될까요??

0
  • 답변 1

  • esrse
    1k
    2021-01-19 19:43:05

    브라우저와 자바스크립트 엔진은, 자동차를 브라우저라고 하면, 자동차바퀴를 자바스크립트 엔진이라고 볼 수 있을 거 같습니다.

    요즘에 많이 사용되는 자바스크립트 엔진은 V8입니다.


    브라우저는 HTTP프로토콜을 이용해서 웹서버로 요청을 보내고, 응답을 받는 기능도 하고,

    응답으로 받아진 html을 파싱하고 그것을 DOM 구조로 만드는 기능도 하고,

    DOM 구조를 화면에 렌더링하는 기능도 하고,

    렌더링할 때 CSS를 계산하는 기능도 하고,

    자바스크립트 코드를 javascript runtime에서 구동시키는 기능도 합니다.

    여러가지 기능을 다 합쳐서 자동차에 비유해볼 수 있고,

    자바스크립트는 자동차에 바퀴에 해당한다고 볼 수 있는 거죠.


    과거에는 브라우저에 자바스크립트를 구동하는 기능이 없었어도 큰 문제가 없었을 겁니다. 과거에는 html만으로 정적인 페이지만 보여주면 됐었기 때문이죠. 그러다가 웹페이지에 동작이 필요해지면서 자바스크립트라는 언어가 브라우저에서 쓰이게 됩니다. 그리고 웹의 폭발적인 성장과 함께 자바스크립트도 유명해지게됐죠.


    브라우저에서 제공하는 여러가지 기능들은 모듈화 되어있습니다. 어느정도 갈아끼울 수 있게 만들어져있죠. 물론 전구를 갈아끼우는 것처럼 쉽진 않습니다.


    자바스크립트 엔진도 그런 모듈중에 하나이고,  그것이 자바스크립트와 관련된 기능을 담당합니다.

    자바스크립트 엔진은 자바스크립트 런타임을 제공합니다. 자바스크립트 코드를 파싱하고, 그것이 동작할 독립된 메모리 상의 공간을 만들어주고, 자바스크립트 코드가 자신만의 힙과 스택을 가지고 동작할 수 있게 해줍니다. 그리고 가비지 컬렉션도 해주죠.

  • 로그인을 하시면 답변을 등록할 수 있습니다.