JS의 메인스레드인 ‘이벤트 루프’는 싱글스레드이지만,
이벤트 루프만 독립적으로 실행되지 않고 웹 브라우저나 Node Js같은 멀티스레드 환경에서 실행된다.
즉, JS 자체는 싱글스레드지만, 런타임은 멀티스레드 환경일 수 있다!
→ 비동기 작업을 통해 처리한다
JS의 비동기 런타임 과정
CallStack은 일하는곳, Web API는 실행할 수 있는 작업 목록, Task Queue는 작업순서 리스트, Event Loop 는 작업 관리자 느낌
스레드 정리
싱글 쓰레드의 경우에는 동기화(동시성 문제)를 신경쓰지 않아도 되기 때문에 훨씬 간편하다.
이벤트 루프가 태스크를 핸들링할 때 함수의 종류에 따라 다른 큐에 태스크를 넣는다.
setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI 렌더링
Promise, MutationObserver, process.nextTick
→ 태스크 큐와 마이크로태스크 큐중 누가 먼저일까?
→ 마이크로태스크가 먼저이다.
→ 마이크로태스크 큐의 모든 태스크들을 처리한 후에 태스크 큐의 태스크들을 처리한다.
참고
https://ionian-plier-9e9.notion.site/Javascript-eb8788f530f44243b0949585d69ed265