읽은 글 : Tasks, microtasks, queues and schedules

·2020년 8월 29일
0

아침 글읽기

목록 보기
2/7

[번역] Tasks, microtasks, queues and schedules


예전에 'Node.js 와 싱글 스레드' 라는 주제를 발표하기 위해 읽었던 글인데, 오늘 어떤 계기로 다시 한 번 찾아 읽게 되었다. 분명 다 이해했다고 생각했는데, 시간이 흐르니 또 이 가물가물하다!

🔗 signle thread, event loop 발표 자료

이번에 다시금 읽으며 내 안에서 '출력', '등록', '실행' 등의 용어가 아직 완전히 정리되지 않았다는 생각이 들었다. 다시 한 번 정리해보자.

비동기 task 는 thread pool 에서 처리되며, 처리가 완료되었을 때 실행시킬 callback 이 (macro/micro) queue 에 '등록' 된다.
queue 에 '등록'된 task 는 call stack 으로 옮겨져 '실행' 된다.
call stack 은 task 를 '실행' 하며 결과 값을 '출력' 한다.

또 thread pool 로 넘어가서 처리가 된다면서 왜 다시 queue 에 등록되고 call stack 에 쌓인다는 거지? 라는 의문이 있었는데,

macro/micro task queue 에 등록되는 (쌓이는) task 들은 바로 thread pool 에서 처리된 task 의 callback 이다.

setTimeout, promise 가 Web API 로 '넘어간다' 고들 하는데, 그럼 Web API 란 무엇일까? 노드 환경 libuv 의 thread pool 과 같은 영역일까? 이것도 혼란스러웠는데 추가로 찾아 본 이 레퍼런스 덕에 많이 정리가 되었다.

setTimeout 과 같이 기다려야하는 일을 JS 엔진에서 직접 처리하는 것이 아니라, Web API 를 '통해' 브라우저 혹은 웹 워커에 위임한다.

마지막으로 너무 기초적인 것인데 충격적이게도 내가 잘못 기억하고 있었던 promise 의 then 메서드!

then 메서드는 Promise 를 리턴한다!
그렇기 때문에 리턴된 promise 에 계속 chaining 하듯 then 을 쓸 수 있는 것이다.
그럼 여기서 리턴되는 Promise 란? 언젠가는 끝나는 작업의 결과값을 담는 통과 같은 객체!

0개의 댓글