오늘의 오전 학습 - Javascript 엔진을 구동하는 런타임 환경

싱글 스레드 기반 javascript 가 비동기적 논블로킹 IO 를 지원하는 배경에는 javascript 엔진을 구동하는 런타임환경(브라우저, node.js)의 이벤트 루프와 관련이 있다는 사실은 들어봤지만, 자세히는 살펴보지 못한것 같아 2번에 나누어 좋은 포스팅 글을 요약해보고자 합니다


참고문헌


https://medium.com/@vdongbin/javascript-%EC%9E%91%EB%8F%99%EC%9B%90%EB%A6%AC-single-thread-event-loop-asynchronous-e47e07b24d1c


https://vimeo.com/96425312


요약


자바스크립트 의 동작


  • 자바스크립트는 하나의 콜스택과 매인스레드를 가지고 있습니다

  • 함수 호출에 의한 실행 컨텍스트가 콜스택에 쌓이게 되고 LIFO 방식으로 실행됩니다.

  • 자바스크립트 런타임에서는 비동기 API를 지원하지 않습니다


자바스크립트의 비동기 지원 방식


  • 자바스크립트 런타임 내에서는 지원하지않지만, 자바스크립트 엔진을 구동하는 런타임(브라우저, node.js)환경에서 동시성을 보장하는 비동기, 논블로킹 작업들을 담당합니다.

  • 크게보면 콜스택, webAPI, 테스크 큐의 순환의 이벤트 루프를 통해 자바스크립트와 외부 환경의 상호 작용이 진행됩니다.
    (자세히 들어가면 테스크 큐의 경우 6단계가 존재하는데, 이는 다음에 다뤄보도록 하겠습니다)

  • 비동기 작업들을 webAPI(nodejs 는 nodejsAPI) 환경에서 처리해 준 다음, 테스크 큐로 콜백함수를 넘겨줍니다.

    • 만약 작업을 webAPI로 위임하지 않는다면, 비동기작업이 완료될 때 까지 자바스크립트는 어떠한 작업도 수행할 수 없습니다. (블로킹)

    • 비동기 작업에 한한 순서는 콜스택 -> webAPI -> 테스크 큐 -> (비어있다면) 콜스택

    • 이러한 이유로, 만약 setTimeout API를 사용할 경우, 정확하게 지정한 시간 이후 콜백함수가 실행되지 않을 수 있습니다. 테스크 큐 내 콜백 함수가 실행되려면 콜 스택이 비어 있어야 하기 때문입니다.


Javascript 동작원리 (Single thread, Event loop, Asynchronous)

Medium

Javascript 동작원리 (Single thread, Event loop, Asynchronous)

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 12월 4일 오전 12:39

조회 76

댓글 0

    함께 읽은 게시물

    < 국가도 돈이 없을 땐 ‘프린터’ 버튼을 누른다 >

    1

    ... 더 보기

    <음성 AI 로봇의 종말(?)>

    커리어리 친구들, 세번째 에피소드입니다. 지난 주 OpenAI가 GPT-Real Time 이라는 고급 음성 모델과 개선된 Real Time API를 출시했던 내용을 정리해 봤습니다.

    ... 더 보기