๐ญ
Event Loop์ ๋ํด์
December 25, 2022
JS ์์ง
์ Memory Heap / Call Stack๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, JS๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํ๋ ์ธํฐํ๋ฆฌํฐ(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์์ค ์ฝ๋๋ฅผ ๋ฐ๋ก ์ํํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ ๋๋ ํ๊ฒฝ)๋ค.
JS๋ ๋จ์ผ ์ค๋ ๋(single thread)์ธ๋ฐ ์ฆ, Call Stack์ด ํ ๊ฐ(single)๋ผ๋ ๋ป์ด๋ค.
(๊ฐ์ฅ ์ ๋ช
ํ JS ์์ง
์ผ๋ก๋ ๊ตฌ๊ธ์ V8 Engine์ด ์๋ค)
Memory Heap
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ๊ณณ (๋ณ์, ํจ์ ๋ฑ)
Call Stack
- ์ฝ๋๊ฐ ์คํ๋ ๋ ์์ด๋ ๊ณณ. (stack : ์๋ฃ๊ตฌ์กฐ ์ค ํ๋, ์ ์ ํ์ถ)
Web API
- ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API (DOM, Ajax, Timeout ๋ฑ)
- Call Stack์์ ์คํ๋ ๋น๋๊ธฐ ํจ์๋ Web API๋ฅผ ํธ์ถํ๊ณ , Web API๋ ์ฝ๋ฐฑํจ์๋ฅผ Callback Queue ์์ ๋ฃ๋๋ค.
Callback Queue
- ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ ์ฝ๋ฐฑํจ์๊ฐ ๋ณด๊ด๋๋ ๊ณณ (setTimeout, addEventListener ๋ฑ) (Queue : ์๋ฃ๊ตฌ์กฐ ์ค ํ๋, ์ ์ ์ ์ถ)
Event Loop
- Call Stack๊ณผ Callback Queue ์ํ๋ฅผ ์ฒดํฌํ์ฌ, Callback์ด ๋น ์ํ๊ฐ ๋๋ฉด, Callback Queue์ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ์ Call Stack์ผ๋ก ๋ฃ๋๋ค. (์ด๋ฐ ๋ฐ๋ณต์ ์ธ ์์ ์ ํฑ(tick)์ด๋ผ ํ๋ค)
Event Loop ๋์์๋ฆฌ
- V8 ์์ง์์ ์ฝ๋๊ฐ ์คํ๋๋ฉด, Call Stack์ด ์์ธ๋ค.
- Stack์ ์ ์
ํ์ถ์ ๋ฃฐ์ ๋ฐ๋ผ ์ ์ผ ๋ง์ง๋ง์ ๋ค์ด์จ ํจ์๊ฐ ๋จผ์ ์คํ๋๋ฉฐ, Stack์ ์์ฌ์ง ํจ์๊ฐ ๋ชจ๋ ์คํ๋๋ค.
- ๋น๋๊ธฐ ํจ์๊ฐ ์คํ๋๋ฉด Web API ํธ์ถ๋๊ณ
- Web API๋ ๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑํจ์๋ฅผ Callback Queue์ ๋ฃ๋๋ค.
- Event Loop๋ Call Stack์ด ๋น ์ํ๊ฐ ๋๋ฉด, Callback Queue์ ์๋ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ์ Call Stack์ผ๋ก ์ด๋์ํจ๋ค. (์ด๋ฌํ ๋ฐ๋ณต ์์
์
ํฑ
์ด๋ผ ํ๋ค.)
โญ๏ธ JS๊ฐ ์ฝ๊ธ(๋จ์ผ) ์ค๋ ๋์ง๋ง ๋ฉํฐ ์ค๋ ๋์ฒ๋ผ ๋ณด์ฌ์ง๋ ์ด์ ๋, Web APIโCallback QueueโEvent Loop์ ์๋์๋ฆฌ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ ๋งํฌ
JavaScript ๋น๋๊ธฐ ํต์ฌ Event Loop ์ ๋ฆฌ