호출스택과 이벤트 루프

PARK·2021년 5월 10일
0

javaScript

목록 보기
3/4
post-thumbnail

동기적

자바스크립트는 항상 두 가지로 작동한다. 동기적-블록킹과 비동기적-논블록킹이다. 특히 대부분의 코드는 항상 위에서 아래로 왼쪽에서 오른쪽으로 작동한다. 한 줄의 스크립트 번역이 끝나야 다음 줄을 번역하기 시작하는 동기적-블록킹언어이다. 이벤트 루프는 자바스크립트의 사용성에서 획기적인 부분을 담당한다.

  • 쉽게 볼 수 있는 이벤트 루프( MDN 참고)

자바스크립트는 싱글스레드이지만 백그라운드(Web api)를 활용해 멀티스레드로 작동한다. 백그라운드는 자바스크립트 엔진이 아니라서 호출스택(call stack)과 백그라운드(Web Api)는 동시에 진행될 수 있다. 자바스크립트를 비동기적으로 사용할 수 있는 이유이다.

브라우저는 어떻게 동작하는가?
https://d2.naver.com/helloworld/59361

  • 브라우저, HTML에 대한 설명이 잘 나와있습니다.

항상 자바스크립트가 비동기로 사용되는 것은 아닙니다. 대표적으로 비동기로 사용되는 메서드는 정해져있습니다.
then을 만나는 순간 비동기로 간다. promise의 then함수가 우선순위가 높다

Microtask queue vs task queue

  • 콜백함수를 태스크 큐에 넣는 함수들

setTimeout, setInterval, setImmediate,

  • 콜백함수를 마이크로태스크 큐에 넣는 함수들

process.nextTick, Promise

마이크로태스크 큐가 일반적으로 테스크 큐 보다 빠르게 처리된다. promise는 내부에서 동기적으로 작동하다가. then/catch/promise를 만나면 비동기적으로 작동된다.

질문

promise와 async/await의 내부적 작동에 대한 이벤트루프는 찾을 수 없었다. 이벤트루프를 공부하니 async와 await에 비동기적인 부분과 동기적인 부분 await는 어떤 방식으로 이벤트 루프가 구현되는지 궁금하다.

참고 http://sculove.github.io/blog/2018/01/18/javascriptflow/

profile
익숙한 것에 작별을 고해야한다

0개의 댓글