Event Loop, Web APIs, (Micro)task Queue
πβοΈ μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ
μλ°μ€ν¬λ¦½νΈλ ν λ²μ νλμ μμ λ§ μ²λ¦¬ν μ μλ μ±κΈ μ€λ λμ΄λ€. μ΄λ ν μμ μ μ²λ¦¬νλλ° μκ°μ΄ μ€λ κ±Έλ¦°λ€λ©΄ νλ‘κ·Έλ¨μ΄ λ©μΆλ blockingμ΄ λ°μν μ μλ€.
νμ§λ§ λ€νΈμν¬ μμ², νμ΄λ¨Έ λ± μμ μ΄ λ°μνμ λ, νλ‘κ·Έλ¨μ΄ λ©μΆμ§ μκ³ λ€λ₯Έ μμ λ€μ΄ μ€νλλ κ²μ λ³Ό μ μλ€. μ΄λ setTimeout, Promise λ± Web APIs μ€ λΉλκΈ° μμ μ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μλ λΈλΌμ°μ κ° λ΄λΉνμ¬ μ²λ¦¬νκΈ° λλ¬Έμ΄λ€.
π₯ μλ°μ€ν¬λ¦½νΈ λ°νμ κ³Όμ
Call Stack: ν¨μ νΈμΆ μ ν¨μ μ€ν 컨ν μ€νΈκ° μ½ μ€νμ νΈμλκ³ μμ°¨μ μ€ν λλ€. μ€νμ΄ μλ£λλ©΄ μ½ μ€νμμ μ κ±°λλ€.
Web APIs: setTimeout, Promise λ± λΉλκΈ° μμ μ μ½ μ€νμμ κ°μ Έμ λΈλΌμ°μ κ° λ΄λΉνλλ‘ νλ€.
Task Queue: setTimeoutκ³Ό κ°μ λΉλκΈ° ν¨μμ μ½λ°± ν¨μ λλ μ΄λ²€νΈ νΈλ€λ¬κ° μΌμμ μΌλ‘ 보κ΄λλ μμ
Microtask Queue: νλ‘λ―Έμ€ νμ μ²λ¦¬ λ©μλ ‘then’, ‘catch’, ‘finally’μ μ½λ°± ν¨μ, await μ΄ν μ½λ λ±μ΄ μΌμμ μΌλ‘ 보κ΄λλ μμμ΄λ€. Task Queueλ³΄λ€ μ°μ μμκ° λλ€.
Event Loop: μ½ μ€νμ΄ λΉμ΄μλμ§, (micro)task queueμ λκΈ° μ€μΈ ν¨μκ° μλμ§ νμΈνμ¬, λκΈ° μ€μΈ ν¨μλ₯Ό μ½ μ€νμΌλ‘ μ΄λμν¨λ€.
μ΄λ―Έμ§ λ° μμ μ°Έκ³
https://www.lydiahallie.com/blog/event-loop
https://www.youtube.com/watch?v=eiC58R16hb8
- Call Stackμ ν¨μκ° νΈμλκ³ μμ°¨μ μΌλ‘ μ€νλ ν μ κ±°λλ€.
- λ§μ½ λΉλκΈ° ν¨μ setTimeout μ΄ νΈμλλ©΄, Web APIs μμμΌλ‘ μ΄λνλ€.
- μ§μ λ λλ μ΄ μκ°μ΄ μ§λ ν, setTimeoutμ μ½λ°±ν¨μκ° Task Queue μμμΌλ‘ μ΄λνλ€.
- EventLoopκ° μ½ μ€νμ΄ λΉμλμ§ νμΈ ν, Task Queueμ λκΈ° μ€μ΄λ setTimeoutμ μ½λ°±ν¨μκ° Call StackμΌλ‘ μ΄λνλ€.
- SetTimeoutμ μ½λ°±ν¨μκ° μ€νλλ€.
π μΌλν μ
Event Loopλ Queueμ λκΈ° μ€μΈ ν¨μλ₯Ό Call Stackμ΄ λΉμ΄μμ λλ§ λ³΄λΈλ€. λ§μ½ Call Stackμ΄ λΉμ΄μμ§ μλ€λ©΄, setTimeoutμ μ§μ λ λλ μ΄ μκ°λ³΄λ€ λ μ€λ μ§μ°λ μ μλ€.
κ·Έλ¦¬κ³ Microtask Queueκ° Task Queueλ³΄λ€ μ°μ μμκ° λλ€. Microtask Queueμ λκΈ°μ€μΈ ν¨μκ° μμλκΉμ§ Task Queueμ ν¨μλ Call StackμΌλ‘ μ΄λνμ§ λͺ»νλ€.
π§· μ°Έκ³
https://www.lydiahallie.com/blog/event-loop
https://www.youtube.com/watch?v=eiC58R16hb8
https://dkrnfls.tistory.com/362