πŸ“š ν•™μŠ΅ λ²”μœ„

νƒœμŠ€ν¬ 큐와 마이크둜 νƒœμŠ€ν¬ 큐

πŸ“† ν•™μŠ΅ λ‚ μ§œ

2023 / 12 / 23 (ν† )

πŸ‘¨πŸ»β€πŸ’» ν•™μŠ΅ ν›„ μ•Œκ²Œ 된 λ‚΄μš©

🎯 νƒœμŠ€ν¬ 큐와 마이크둜 νƒœμŠ€ν¬ 큐

νƒœμŠ€ν¬ 큐와 λ‹€λ₯΄κ²Œ, 마이크둜 νƒœμŠ€ν¬ νλΌλŠ” 것도 μžˆλ‹€.
이벀트 λ£¨ν”„λŠ” ν•˜λ‚˜μ˜ 마이크둜 νƒœμŠ€ν¬ 큐λ₯Ό κ°–κ³  μžˆλŠ”λ°, 기쑴의 νƒœμŠ€ν¬ νμ™€λŠ” λ‹€λ₯Έ νƒœμŠ€ν¬λ₯Ό μ²˜λ¦¬ν•œλ‹€κ³ ν•œλ‹€. 여기에 λ“€μ–΄κ°€λŠ” 마이크둜 νƒœμŠ€ν¬μ—λŠ” λŒ€ν‘œμ μœΌλ‘œ Promiseκ°€ μžˆλ‹€. 이 마이크둜 νƒœμŠ€ν¬ νλŠ” κΈ°μ‘΄ νƒœμŠ€ν¬ 큐보닀 μš°μ„ κΆŒμ„ κ°–λŠ”λ‹€κ³ ν•œλ‹€.
즉, setTimeoutκ³Ό setInterval은 Promise보닀 늦게 μ‹€ν–‰λœλ‹€.
마이크둜 νƒœμŠ€ν¬ 큐가 λΉ„μ–΄μžˆμ„ λ•Œ κΉŒμ§€ κΈ°μ‘΄ νƒœμŠ€ν¬ 큐의 싀행은 λ’€λ‘œ λ―Έλ£¨μ–΄μ§„λ‹€κ³ ν•œλ‹€.

<script>
function foo() {
console.log('foo')
}

function bar() {
console.log('bar')
}

function baz() {
console.log('baz')
}


setTimeout(foo , 0)

Promise.resolve().then(bar).then(baz)

</script>

예제 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ bar , baz , foo 순으둜 μ‹€ν–‰λœλ‹€.
ν™•μ‹€νžˆ Promiseκ°€ μš°μ„ κΆŒμ΄ μžˆμŒμ„ μ•Œ 수 μžˆλ‹€.
각 νƒœμŠ€ν¬μ— λ“€μ–΄κ°€λŠ” λŒ€ν‘œμ μΈ μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • νƒœμŠ€ν¬ 큐 : setTimeout , setInterval , setImmediate

  • 마이크둜 νƒœμŠ€ν¬ 큐 : process.nextTick , Promises.queueMicroTask, MutationObserver

    κ·Έλ ‡λ‹€λ©΄ λ Œλ”λ§μ€ μ–Έμ œ μ‹€ν–‰ λ˜λŠ”κ²ƒμΌκΉŒ

    νƒœμŠ€ν¬ 큐λ₯Ό μ‹€ν–‰ν•˜κΈ°μ— μ•žμ„œ λ¨Όμ € 마이크둜 νƒœμŠ€ν¬ 큐λ₯Ό μ‹€ν–‰ν•˜κ³ ,
    이 마이크둜 νƒœμŠ€ν¬ 큐λ₯Ό μ‹€ν–‰ν•œ 뒀에 λ Œλ”λ§μ΄ μΌμ–΄λ‚œλ‹€κ³ ν•œλ‹€.
    각 마이크둜 νƒœμŠ€ν¬ 큐 μž‘μ—…μ΄ 끝날 λ•Œλ§ˆλ‹€ ν•œ λ²ˆμ”© λ Œλ”λ§ν•  기회λ₯Ό μ–»κ²Œ λœλ‹€.

결둠적으둜 동기 μ½”λ“œλŠ” 물둠이고 마이크둜 νƒœμŠ€ν¬ λ˜ν•œ
λ§ˆμ°¬κ°€μ§€λ‘œ λ Œλ”λ§μ— 영ν–₯을 λ―ΈμΉœλ‹€λŠ” 것이닀.
λ”°λΌμ„œ λ§Œμ•½ νŠΉμ • λ Œλ”λ§μ΄ μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄ 무거운 μž‘μ—…κ³Ό 연관이 μžˆλ‹€λ©΄
이λ₯Ό μ–΄λ–€ μ‹μœΌλ‘œ λΆ„λ¦¬ν•΄μ„œ μ‚¬μš©μžμ—κ²Œ 쒋은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ²½ν—˜μ„
μ œκ³΅ν•΄ 쀄지 κ³ λ―Όν•΄ 보아야 ν•œλ‹€.

🎯 정리

μžλ°”μŠ€ν¬λ¦½νŠΈ ν™˜κ²½μ—μ„œ 비동기 μ²˜λ¦¬κ°€ μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€ μ‚΄νŽ΄λ³΄μ•˜λ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것 μžμ²΄λŠ” μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ μ΄λ£¨μ–΄μ Έμ„œ 비동기λ₯Ό μ²˜λ¦¬ν•˜κΈ° μ–΄λ ΅μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것 이외에 νƒœμŠ€ν¬ 큐 , 이벀트 루프 , 마이크둜 νƒœμŠ€ν¬ 큐 , λΈŒλΌμš°μ €/Node.js API 등이 μ μ ˆν•œ μƒνƒœκ³„λ₯Ό 이루고 있기 λ•Œλ¬Έμ— μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œλŠ” λΆˆκ°€λŠ₯ν•œ 비동기 이벀트 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•΄μ§„ κ²ƒμ΄λΌκ³ ν•œλ‹€.

➑️ λ‹€μŒ κΈ€μ—μ„œλŠ” λ¦¬μ•‘νŠΈμ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” 문법에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

profile
β˜„οΈ

0개의 λŒ“κΈ€