- 42μ₯ λΉλκΈ° νλ‘κ·Έλλ°
- 42.1 λκΈ° μ²λ¦¬μ λΉλκΈ° μ²λ¦¬
- 42.2 μ΄λ²€νΈ 루νμ νμ€ν¬ ν
π€ ν¨μ μ€ν 컨ν μ€νΈμ μ€ν 컨ν μ€νΈ μ€ν
- ν¨μλ₯Ό νΈμΆνλ©΄ ν¨μ μ½λκ° νκ°λμ΄ ν¨μ μ€ν 컨ν μ€νΈκ° μμ±λ©λλ€. μ€ν 컨ν μ€νΈ μ€ν(= μ½ μ€ν)μ νΈμ¬λκ³ ν¨μ μ½λλ₯Ό μ€νν©λλ€.
- μ€ν μ’ λ£μ μ€ν 컨ν μ€νΈ μ€νμμ νλμ΄ μ κ±°λ©λλ€.
const foo = () => {};
const bar = () => {};
foo();
bar();β μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨ νλμ μ€ν 컨ν μ€νΈ μ€νμ κ°μ§λλ€. λ°λΌμ, λμμ 2κ° μ΄μμ ν¨μλ₯Ό μ€νν μ μμ΅λλ€.
β μ±κΈ μ€λ λ λ°©μμΌλ‘ λμν©λλ€. λ°λΌμ, μ²λ¦¬μ μκ°μ΄ 걸리λ taskλ₯Ό μ€ννλ κ²½μ° λΈλ‘νΉ(μμ μ€λ¨) μ΄ λ°μλ©λλ€.
// sleep ν¨μλ μΌμ μκ°(delay)μ΄ κ²½κ³Όν μ΄νμ μ½λ°± ν¨μ(func)λ₯Ό νΈμΆνλ€.
function sleep(func, delay) {
const delayUntil = Date.now() + delay;
// νμ¬ μκ°(Date.now())μ delayλ₯Ό λν delayUntilμ΄ νμ¬ μκ°λ³΄λ€ μμΌλ©΄ κ³μ λ°λ³΅νλ€.
while (Date.now() < delayUntil);
// μΌμ μκ°(delay)μ΄ κ²½κ³Όν μ΄νμ μ½λ°± ν¨μ(func)λ₯Ό νΈμΆνλ€.
func();
}
function foo() {
console.log("foo");
}
function bar() {
console.log("bar");
}
// sleep ν¨μλ 3μ΄ μ΄μ μ€νλλ€.
sleep(foo, 3 * 1000);
// bar ν¨μλ sleep ν¨μμ μ€νμ΄ μ’
λ£λ μ΄νμ νΈμΆλλ―λ‘ 3μ΄ μ΄μ λΈλ‘νΉλλ€.
bar();
// (3μ΄ κ²½κ³Ό ν) foo νΈμΆ -> bar νΈμΆπ λκΈ° μ²λ¦¬ (synchronous)
- νμ¬ μ€ν μ€μΈ νμ€ν¬κ° μ’ λ£ν λκΉμ§ λ€μμ μ€νλ νμ€ν¬κ° λκΈ°νλ λ°©μ
- μ€ν μμλ 보μ₯λμ§λ§, μμ νμ€ν¬κ° μ’ λ£λ λκΉμ§ μ΄ν νμ€ν¬λ€μ΄ λΈλ‘νΉλ©λλ€.
π€ λΉλκΈ° μ²λ¦¬
- νμ¬ μ€ν μ€μΈ νμ€ν¬κ° μ’ λ£λμ§ μλ μνλΌλ λ€μ νμ€ν¬λ₯Ό κ³§λ°λ‘ μ€ννλ λ°©μ
- μ€ν μμλ 보μ₯λμ§ μμ§λ§, λΈλ‘νΉμ΄ λ°μλμ§ μμ΅λλ€.
setTimeout,setInterval, HTTP μμ², μ΄λ²€νΈ νΈλ€λ¬- μ½λ°± ν¨ν΄μ λ¬Έμ μ± -> 45μ νλ‘λ―Έμ€
function foo() {
console.log("foo");
}
function bar() {
console.log("bar");
}
// νμ΄λ¨Έ ν¨μ setTimeoutμ μΌμ μκ°μ΄ κ²½κ³Όν μ΄νμ μ½λ°± ν¨μ fooλ₯Ό νΈμΆνλ€.
// νμ΄λ¨Έ ν¨μ setTimeoutμ bar ν¨μλ₯Ό λΈλ‘νΉνμ§ μλλ€.
setTimeout(foo, 3 * 1000);
bar();
// bar νΈμΆ -> (3μ΄ κ²½κ³Ό ν) foo νΈμΆλΈλΌμ°μ κ° λμμ ν μ€ν¬κ° λμμ μ²λ¦¬λλ κ²μ²λΌ λκ»΄μ§λλ€. π μλ°μ€ν¬λ¦½νΈμ λμμ±μ μ§μ νλ μ΄λ²€νΈ 루ν
π€ μ½ μ€ν
- μ€ν 컨ν μ€νΈ μ€ν
- μμ±λ μ€ν 컨ν μ€νΈκ° μΆκ°λκ³ μ κ±°λλ μ€ν μλ£κ΅¬μ‘°λ₯Ό μλ―Έν©λλ€.
π€ ν
- κ°μ²΄κ° μ μ₯λλ λ©λͺ¨λ¦¬ 곡κ°
- λΉκ΅¬μ‘°ν : ν λΉν΄μΌν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό λ°νμμ κ²°μ (λμ ν λΉ)ν©λλ€.
λΉλκΈ° μ²λ¦¬μμ μμ€μ½λ νκ°μ μ€ν μΈμλ μλ°μ€ν¬λ¦½νΈ μμ§μ ꡬλνλ νκ²½μΈ λΈλΌμ°μ λλ Node.jsκ° λ΄λΉν©λλ€.
β μ΄λ₯Ό μν΄ νμ€ν¬ νμ μ΄λ²€νΈ 루νλ₯Ό μ 곡ν©λλ€.
π€ ν μ€νΈ ν
- λΉλκΈ° ν¨μμ μ½λ°± ν¨μ λλ μ΄λ²€νΈ νΈλ€λ¬κ° μΌμμ μΌλ‘ 보κ΄λλ μμ
π€ μ΄λ²€νΈ 루ν
- μ½ μ€νμ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμ νμ€ν¬ νμ λκΈ°μ€μΈ ν¨μ μ 무λ₯Ό λ°λ³΅ν΄μ νμΈνλ μν .
- μ½ μ€νμ΄ λΉμ΄ μκ³ νμ€ν¬ νμ λκΈ°μ€μΈ ν¨μκ° μμ μ μμ°¨μ (
FIFO)μΌλ‘ μ΄λν©λλ€.
function foo() {
console.log("foo");
}
function bar() {
console.log("bar");
}
setTimeout(foo, 0); // 0μ΄(μ€μ λ 4ms) νμ foo ν¨μκ° νΈμΆλλ€.
bar();- μ μ μ½λκ° νκ°λμ΄ μ μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ μ½ μ€νμ νΈμ¬λ©λλ€.
- μ μ μ½λ μ€νμ
setTimeoutν¨μλ₯Ό νΈμΆν©λλ€. μ΄λsetTimeoutν¨μμ ν¨μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ μ½μ€νμ νΈμ¬λμ΄ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° λ©λλ€. π λΈλΌμ°μ μν : μ€ν 컨ν μ€νΈ μμ±
setTimeoutμ€νμ μ½λ°± ν¨μλ₯Ό νΈμΆ μ€μΌμ€λ§ ν μ’ λ£λμ΄ μ½ μ€νμμ νλ©λλ€. π λΈλΌμ°μ μν : νμ΄λ¨Έ μ€μ κ³Ό νμ΄λ¨Έ λ§λ£μ μ½λ°± ν¨μλ₯Ό νμ€ν¬ νμ νΈμ¬
- λ€μ κ³Όμ μ΄ λ³ν μ²λ¦¬ λ©λλ€. (νμ€νΈ ν)
- μ§μ° μκ°μ΄ 4ms μ΄νμΈ κ²½μ° μ΅μ μ§μ° μκ° 4msμ΄ μ§μ λμ΄, 4ms νμ μ½λ°± ν¨μ fooκ° νμ€ν¬ νμ νΈμ¬λμ΄ λκΈ° . μ΄ν μ½ μ€νμ΄ λΉλ©΄ νΈμΆ π λΈλΌμ°μ μν : νμ΄λ¨Έ μ€μ , νμ΄λ¨Έ λ§λ£ λκΈ°
- bar ν¨μ νΈμΆλμ΄ μ€ν 컨ν μ€νΈκ° μμ±λκ³ μ½ μ€νμ νΈμ¬λμ΄ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° λ©λλ€. μ΄ν μ’ λ£μ μ½ μ€νμμ νλ©λλ€. π λΈλΌμ°μ κ° νμ΄λ¨Έλ₯Ό μ€μ ν ν 4msκ° κ²½κ³Όλμλ€λ©΄ foo ν¨μλ μμ§ νμ€ν¬ νμμ λκΈ° μ€ μ λλ€.
- μ μ μ½λ μ€νμ΄ μ’ λ£λκ³ μ μ μ€ν 컨ν μ€νΈκ° μ½ μ€νμμ νλ©λλ€.
β λΉλκΈ° ν¨μλ νμ€ν¬ νμ νΈμ¬λμ΄ λκΈ° νλ€ μ½ μ€νμ΄ λΉκ² λλ©΄, μ μ μ½λ λ° λͺ μμ μΌλ‘ νΈμΆλ ν¨μκ° λͺ¨λ μ’ λ£λλ©΄ μ½ μ€νμ νΈμ¬λμ΄ μ€ν λ©λλ€.
β μλ°μ€ν¬λ¦½νΈ μμ§μ μ±κΈ μ€λ λλ‘ λμ νμ§λ§ λΈλΌμ°μ λ λ©ν° μ€λ λλ‘ λμ ν©λλ€.

