<star />
μ΄λ²€νΈ 루νμ νμ€ν¬ ν λ³Έλ¬Έ
(κ°μκ³μλ λ보μ΄μ¦ νκ° μλ€.)
μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λλ‘ λμνλ€. π
μ±κΈ μ€λ λ λ°©μμ ν λ²μ νλμ νμ€ν¬λ§ μ²λ¦¬ν μ μλ€λ κ²μ μλ―Ένλ€. 1οΈβ£
νμ§λ§, λΈλΌμ°μ λμμ μ΄ν΄λ³΄λ©΄ μλ§μ νμ€ν¬κ° λμμ μ²λ¦¬λλ κ²μ²λΌ λκ»΄μ§λ€. πͺ
1) μ΄λ²€νΈ 루ν
- μλ°μ€ν¬λ¦½νΈμ λμμ± (concurrency) μ μ§μνλ€.
- λΈλΌμ°μ μ λ΄μ₯λ κΈ°λ₯ μ€ νλ.
βοΈ μ½ μ€ν (call stack)
- μμ€ μ½λ (μ μ μ½λλ ν¨μ μ½λ λ±...) νκ° κ³Όμ μμ μμ±λ μ€ν 컨ν μ€νΈκ° μΆκ°λκ³ , μ κ±°λλ μ€ν μλ£κ΅¬μ‘°μΈ μ€ν 컨ν μ€νΈ μ€νμ΄ λ°λ‘ μ½ μ€νμ΄λ€.
- ν¨μλ₯Ό νΈμΆνλ©΄ ν¨μ μ€ν 컨ν μ€νΈκ° μμ°¨μ μΌλ‘ μ½ μ€νμ νΈμλμ΄ μμ°¨μ μΌλ‘ μ€νλλ€.
- μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨ νλμ μ½ μ€νμ μ¬μ©νκΈ° λλ¬Έμ μ΅μμ μ€ν 컨ν μ€νΈ (μ€ν μ€μΈ μ€ν 컨ν μ€νΈ) κ° μ’ λ£λμ΄ μ½ μ€νμμ μ κ±°λκΈ° μ κΉμ§λ λ€λ₯Έ μ΄λ€ νμ€ν¬λ μ€νλμ§ μμ.
βοΈ ν (heap)
- κ°μ²΄κ° μ μ₯λλ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€.
- μ½ μ€ν μμμΈ μ€ν 컨ν μ€νΈλ νμ μ μ₯λ κ°μ²΄λ₯Ό μ°Έμ‘°νλ€.
- λ©λͺ¨λ¦¬μ κ°μ μ μ₯νλ €λ©΄ λ¨Όμ κ°μ μ μ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ ν΄μΌ ν¨. κ°μ²΄λ μμ κ°κ³Όλ λ¬λ¦¬ ν¬κΈ°κ° μ ν΄μ Έ μμ§ μμΌλ―λ‘ ν λΉν΄μΌ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό λ°νμμ κ²°μ . μ¦, λμ ν λΉν΄μΌ νλ€. λ°λΌμ, κ°μ²΄κ° μ μ₯λλ λ©λͺ¨λ¦¬ 곡κ°μΈ νμ ꡬ쑰νλμ΄ μμ§ μλ€λ νΉμ§μ΄ μμ.
μ½ μ€νκ³Ό νμΌλ‘ ꡬμ±λ μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨μν νμ€ν¬κ° μμ²λλ©΄ μ½ μ€νμ ν΅ν΄ μμ²λ μμ μ μμ°¨μ μΌλ‘ μ€ννλ€.
λΉλκΈ° μ²λ¦¬μμ μμ€μ½λμ νκ°μ μ€νμ μ μΈν λͺ¨λ μ²λ¦¬λ μλ°μ€ν¬λ¦½νΈ μμ§μ ꡬλνλ νκ²½μΈ λΈλΌμ°μ or Node.jsκ° λ΄λΉν¨.
μλ₯Ό λ€μ΄, λΉλκΈ°λ‘ λμνλ setTimeout μ μ½λ°±ν¨μμ νκ°μ μ€νμ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ΄λΉνμ§λ§,
νΈμΆ μ€μΌμ€λ§μ μν νμ΄λ¨Έ μ€μ κ³Ό μ½λ°±ν¨μμ λ±λ‘μ λΈλΌμ°μ or Node.js κ° λ΄λΉνλ€.
λΈλΌμ°μ λ νμ€ν¬ νμ μ΄λ²€νΈ 루νλ₯Ό μ 곡νλ€.
βοΈ νμ€ν¬ ν ( task queue / event queue / callback queue )
- setTimeout, setInterval κ³Ό κ°μ λΉλκΈ° ν¨μμ μ½λ°±ν¨μ, μ΄λ²€νΈ νΈλ€λ¬κ° μΌμμ μΌλ‘ 보κ΄λλ μμ.
>>>> νλ‘λ―Έμ€μ νμ μ²λ¦¬ λ©μλμ μ½λ°± ν¨μκ° μΌμμ μΌλ‘ 보κ΄λλ λ§μ΄ν¬λ‘νμ€ν¬ νλ μ‘΄μ¬ν¨. <<<<
βοΈ μ΄λ²€νΈ 루ν (event loop)
- μ½ μ€νμ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° μλμ§ μ 무 νλ¨.
- νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μ (μ½λ°±ν¨μ, μ΄λ²€νΈ νΈλ€λ¬...λ±) κ° μλμ§ λ°λ³΅ νμΈ.
- μ½ μ€νμ΄ λΉμ΄ μκ³ , νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μκ° μλ€λ©΄ μ΄λ²€νΈ 루νλ μμ°¨μ (FIFO : First In First Out) μΌλ‘ νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μλ₯Ό μ½ μ€νμΌλ‘ μ΄λμν¨λ€.
μ΄λ, μ½ μ€νμΌλ‘ μ΄λν ν¨μλ μ€νλ¨. μ¦, νμ€ν¬ νμ μΌμ 보κ΄λ ν¨μλ€μ λΉλκΈ° μ²λ¦¬ λ°©μμΌλ‘ λμνλ€.
function foo () {
console.log("foo");
}
function bar() {
console.log("bar");
}
setTimeout(foo, 0); // 0μ΄κ° μλλΌ μ€μ λ 4ms μ΄λ€. 4ms νμ foo ν¨μκ° νΈμΆλ¨.
bar()
μ μ μ½λ λ° λͺ μμ μΌλ‘ νΈμΆλ ν¨μκ° λͺ¨λ μ’ λ£νλ©΄ λΉλ‘μ μ½μ€νμ νΈμλμ΄ μ€νλλ€.
μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ λ°©μμΌλ‘ λμνλ€.
κ·Έλ¬λκΉ, μ±κΈ μ€λ λλ‘ λμνλ€λ κ²μ λΈλΌμ°μ μ λ΄μ₯λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄λΌλ κ²μ΄ μ€μνλ€.
μ¦, μλ°μ€ν¬λ¦½νΈ μμ§μ μ±κΈ μ€λ λλ‘ λμνμ§λ§, λΈλΌμ°μ λ λ©ν° μ€λ λλ‘ λμνλ€.
setTimeout ν¨μμ λ κ°μ§ κΈ°λ₯μΈ νμ΄λ¨Έ μ€μ κ³Ό νμ΄λ¨Έλ₯Ό λ§λ£νλμ½λ°± ν¨μλ₯Ό
νμ€ν¬ νμ λ±λ‘νλ μ²λ¦¬λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μλλΌ, λΈλΌμ°μ κ° μ€ννλ€.
λΈλΌμ°μ μ μνκ³Ό μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μννλ μμ μ λ³ν μ²λ¦¬λ¨.
μ΄μ²λΌ, λΈλΌμ°μ μ μλΈμ€ν¬λ¦½νΈ μμ§μ΄ νλ ₯νμ¬ λΉλκΈ° ν¨μμΈ setTimeout ν¨μλ₯Ό μ€νν¨.
λΈλΌμ°μ κ° μν -> νμ΄λ¨Έλ₯Ό μ€μ νκ³ νμ΄λ¨Έμ λ§λ£λ₯Ό κΈ°λ€λ¦Ό. μ΄ν νμ΄λ¨Έκ° λ§λ£λλ©΄ μ½λ°± ν¨μκ° νμ€ν¬ νμ νΈμλμ΄ λκΈ°ν¨.
μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μν -> ν¨μμ ν¨μ μ€ν 컨ν μ€νΈ μμ±νκ³ , μ½ μ€νμ νΈμλμ΄ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° λ¨. μ΄ν, ν¨μκ° μ’ λ£λμ΄ μ½ μ€νμμ ν λ¨. μ΄λ λΈλΌμ°μ κ° μ€μ ν μκ°μ΄ κ²½κ³Όνλ€λ©΄ ν¨μλ μμ§ νμ€ν¬ νμμ λκΈ° μ€μΈ κ².
'JavaScript π' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κ°λΉμ§ μ½λ ν° (garbage collector) (0) | 2022.12.22 |
---|---|
null κ³Ό undefined μ μ°¨μ΄μ (0) | 2022.12.21 |
λκΈ°/λΉλκΈ° (0) | 2022.12.10 |
νΈμ΄μ€ν (hoisting) (0) | 2022.12.09 |
ν΄λ‘μ (Closure) (0) | 2022.12.08 |