Event Loop
μλ°μ€ν¬λ¦½νΈλ λ¨μΌ μ€λ λ (Single Thread) κΈ°λ°μ΄κΈ° λλ¬Έμ μ΄λ²€νΈ 루νλ₯Ό μ¬μ©νμ¬ μμ μ μ€μΌμ₯΄λ§ νλ€.
μ΄κ²μ μκ°μ νλ¦μ λ°λΌ μ½λμ μνμ μ²λ¦¬νλ©° κ·Έλλ§λ€ JS Engine μ μ€ννλ©° μλ κ·Έλ¦Όκ³Ό κ°μ ꡬ쑰μ νΉμ±μ λλ€.
μ΄μ λ°λ₯Έ μ΄λ²€νΈ 루νλ λ¨ νκ°μ§μ μλ¬΄λ§ κ°μ§κ³ μλλ° Call Stack
μ Callback Queue
μ κ°μνλ κ² μ΄λ€.
λ§μ½ μ½μ€νμ΄ λΉμ΄ μμΌλ©΄ μ΄λ²€νΈ 루νμμλ νμμ 첫λ²μ§Έ μ΄λ²€νΈλ₯Ό κ°μ Έλ€κ° Call Stack
μ λ°μ΄λ£λκ²μ΄λ©° κ²°κ³Όμ μΌλ‘ ν΄λΉ μ΄λ²€νΈκ° μ€νλλ κ²μ΄λ€.
λνμ μΈ μλ‘ setTimeout
λμμ΄ μλ€.
setTimeout
μ΄ μλμΌλ‘ μ½λ°±μ μ΄λ²€νΈ 루ν ν μμ λ£μ΄μ£Όμ§λ μλλ€. setTimeout
μ νμ΄λ¨Έλ₯Ό μ€μ νλ©° νμ΄λ¨Έκ° λ§λ£λλ©΄ νΈμ€ν
νκ²½μ΄ μ½λ°±μ μ΄λ²€νΈ 루νμ μμΉμμΌ λ―Έλμ Tick μ΄ μ΄λ₯Ό κ°μ Έλ€ μνν μ μλλ‘ νλ€.
setTimeout(() => {
alert('Callback Func');
}, 1000);
μ¦ μμ μ½λλ setTimeout
μ 1,000ms νμ μ€νμ΄ μλ 1,000ms μ΄νμ Callback Queue
μ μΆκ°λλ κ²μ΄λ€.
- μ½μ€ν, μ½λ°±ν λ±μ λͺ¨λ κ²μ΄ λΉμμ Έμλ€.
console.log('Hi')
κ° μ½μ€νμ μΆκ°λμλ€.console.log('Hi')
κ° μ€νλλ€.console.log('Hi')
κ° μ½ μ€νμμ μ κ±°λμλ€.setTimeout(function cb1() {...})
κ° μ½μ€νμ μΆκ°λμλ€.setTimeout(function cb1() {...})
μ΄ μ€νλλ©΄μ λΈλΌμ°μ κ° μΉ API μ μΌνμΈ νμ΄λ¨Έλ₯Ό μμ±νλ€.
μ΄ νμ΄λ¨Έλ μΉ΄μ΄νΈ λ€μ΄μ μ²λ¦¬νλ€.setTimeout(function cb1() {...})
κ° μ€νμ΄ μλ£λκ³ μ½μ€νμμ μ κ±°λλ€.console.log('Bye')
κ° μ½μ€νμ μΆκ°λμλ€.console.log('Bye')
μ΄ μ€νλμλ€.console.log('Bye')
κ° μ½μ€νμμ μ κ±°λμλ€.- νμ΄λ¨Έκ° μλ£λλ©΄
cb1
μ μ½λ°±νμ λ°μ΄ λ£λλ€. - μ΄λ²€νΈ 루νκ°
cb1
μ μ½λ°±νμμ κ°μ Έλ€ μ½μ€νμ λ°μ΄ λ£λλ€. cb1
μ΄ μ€νλκ³console.log('cb1')
μ΄ μ½μ€νμ μΆκ°λλ€.console.log('cb1')
μ΄ μ€νλλ€.console.log('cb1')
μ΄ μ½ μ€νμμ μ κ±°λλ€.cb1
μ΄ μ½μ€νμμ μ κ±°λλ€.
β Performance Memory Leak β