Skip to content

Latest commit

Β 

History

History
44 lines (28 loc) Β· 3.21 KB

File metadata and controls

44 lines (28 loc) Β· 3.21 KB

이벀트 루프 (Event Loop)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 단일 μŠ€λ ˆλ“œ 기반 μ–Έμ–΄λ‘œ, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 단일 콜 μŠ€νƒμ„ κ°–λŠ”λ‹€. 즉, μš”μ²­μ΄ λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬λœλ‹€.

κ·Έλ ‡λ‹€λ©΄ 비동기 μš”μ²­μ€ μ–΄λ–»κ²Œ 처리될까? 그것은 λ°”λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” ν™˜κ²½μΈ λΈŒλΌμš°μ €λ‚˜ Node.jsκ°€ λ‹΄λ‹Ήν•œλ‹€. μ—¬κΈ°μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„κ³Ό κ·Έ μ‹€ν–‰ ν™˜κ²½μ„ μƒν˜Έ μ—°λ™μ‹œμΌœμ£ΌλŠ” μž₯μΉ˜κ°€ λ°”λ‘œ 이벀트 루프이닀. λ”°λΌμ„œ, 이벀트 λ£¨ν”„λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μžˆμ§€ μ•Šκ³  κ·Έ ν™˜κ²½μ— μ†ν•œλ‹€.


콜 μŠ€νƒ(Call Stack)κ³Ό νž™(Heap)

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•  λ•Œ, μ›μ‹œ νƒ€μž… 및 μ°Έμ‘° νƒ€μž…μ„ μ €μž₯ν•˜λŠ” λ©”λͺ¨λ¦¬ ꡬ쑰둜 콜 μŠ€νƒκ³Ό νž™μ„ κ°€μ§„λ‹€.

  • 콜 μŠ€νƒ : μ›μ‹œνƒ€μž… κ°’(κΈ°λ³Έν˜• 데이터)κ³Ό ν•¨μˆ˜ 호좜의 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•˜λŠ” 곳이닀.
  • νž™ : 객체, λ°°μ—΄, ν•¨μˆ˜μ™€ 같이 크기가 λ™μ μœΌλ‘œ λ³€ν•  수 μžˆλŠ” μ°Έμ‘°νƒ€μž… 값을 μ €μž₯ν•˜λŠ” 곳이닀.

콜 μŠ€νƒκ³Ό νž™μ˜ λ™μž‘ 원리

  1. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜κ³  μ›μ‹œκ°’μ€ μ½œμŠ€νƒμ—, 참쑰값은 νž™μ— μ €μž₯λœλ‹€.
  2. ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ μƒˆλ‘œμš΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜λ©°, λ™μΌν•˜κ²Œ μ›μ‹œκ°’μ€ μ½œμŠ€νƒ, 참쑰값은 νž™μ— μ €μž₯λœλ‹€.
  3. ν•¨μˆ˜ 싀행이 λλ‚˜λ©΄ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ½œμŠ€νƒμ—μ„œ μ œκ±°λœλ‹€.
  4. 전체 μ½”λ“œμ˜ 싀행이 λλ‚˜κ³  μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ½œμŠ€νƒμ—μ„œ μ œκ±°λœλ‹€. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ œκ±°λ¨μ— λ”°λΌμ„œ, νž™μ˜ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” μŠ€νƒμ˜ 값이 μ—†κΈ° λ•Œλ¬Έμ— κ°€λΉ„μ§€ 컬렉터에 μ˜ν•΄ μ œκ±°λœλ‹€.

λ™μž‘ κ³Όμ •

이벀트 λ£¨ν”„λŠ” μ–΄λ–€ μš”μ²­μ΄ λ°œμƒν•˜λ©΄ κ·Έ μž‘μ—…μ— λŒ€ν•΄ μŠ€λ ˆλ“œ μ‹€ν–‰λ§Œμ„ μΌμœΌν‚¬ 뿐 μš”μ²­μ— λŒ€ν•œ μ²˜λ¦¬λŠ” μ›Œμ»€ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ν•œλ‹€.

μ›Œμ»€ μŠ€λ ˆλ“œκ°€ 콜백 ν•¨μˆ˜μ˜ 싀행을 마치면 이벀트 λ£¨ν”„λ‘œ μ‘λ‹΅ν•˜κ²Œ 되고, 이벀트 λ£¨ν”„λŠ” 이것을 μ‹€ν–‰ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ κ²°κ³Όλ₯Ό 응닡해쀀닀.

image


νƒœμŠ€ν¬ 큐 & λ§ˆμ΄ν¬λ‘œνƒœμŠ€ν¬ 큐

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ‹€ν–‰ ν™˜κ²½μ€ 2κ°€μ§€ 큐λ₯Ό κ°–κ³  있으며 각각 슀크립트 μ‹€ν–‰, 이벀트 ν•Έλ“€λŸ¬, 콜백 ν•¨μˆ˜ λ“±μ˜ νƒœμŠ€ν¬κ°€ λ‹΄κΈ°λŠ” 곡간이닀.

νƒœμŠ€ν¬μ˜ μ’…λ₯˜μ— 따라 λ‹€λ₯Έ 큐에 λ‹΄κΈ°κ²Œ λ˜λŠ”λ°, κ·Έ 쀑 setTimeout, setInterval, UI λ Œλ”λ§, requestAnimationFrame 등이 νƒœμŠ€ν¬ 큐에, Promise, MutationObserver 등이 λ§ˆμ΄ν¬λ‘œνƒœμŠ€ν¬ 큐에 λ‹΄κΈ΄λ‹€.

이벀트 λ£¨ν”„λŠ” 2개의 큐λ₯Ό κ°μ‹œν•˜κ³  μžˆλ‹€κ°€ μ½œμŠ€νƒμ΄ λΉ„κ²Œ 되면 μ½œλ°±ν•¨μˆ˜λ₯Ό κΊΌλ‚΄μ™€μ„œ μ‹€ν–‰ν•œλ‹€. μ΄λ•Œ λ§ˆμ΄ν¬λ‘œνƒœμŠ€ν¬ 큐의 μ½œλ°±ν•¨μˆ˜κ°€ μš°μ„ μˆœμœ„λ₯Ό κ°–κΈ° λ•Œλ¬Έμ—, λ§ˆμ΄ν¬λ‘œνƒœμŠ€ν¬ 큐의 μ½œλ°±ν•¨μˆ˜λ₯Ό μ „λΆ€ μ‹€ν–‰ν•˜κ³  λ‚˜μ„œ νƒœμŠ€ν¬ 큐의 μ½œλ°±ν•¨μˆ˜λ“€μ„ μ‹€ν–‰ν•œλ‹€.


μ°Έκ³