Community

오늘의 오전 학습 - 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를 사용할 경우, 정확하게 지정한 시간 이후 콜백함수가 실행되지 않을 수 있습니다. 테스크 큐 내 콜백 함수가 실행되려면 콜 스택이 비어 있어야 하기 때문입니다.

알림

알림이 없습니다