let's get IT with DAVINA ๐ป
JavaScript Event Loop๋? ๋ณธ๋ฌธ
MDN์ ๋ฐ๋ฅด๋ฉด, ์ด๋ฒคํธ ๋ฃจํ๋, "JS์ ๋ฐํ์ ๋ชจ๋ธ์ ์ฝ๋์ ์คํ, ์ด๋ฒคํธ์ ์์ง๊ณผ ์ฒ๋ฆฌ, ํ์ ๋๊ธฐ ์ค์ธ ํ์ ์์ ์ ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฃจํ์ ๊ธฐ๋ฐํ๊ณ ์๋ค" ๋ผ๊ณ ๋์จ๋ค..
๋ฌด์จ๋ง์ธ์ง ๋ํต ๋ชจ๋ฅด๊ฒ ์ผ๋, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์คํ ์๋ฆฌ๋ฅผ ์ด์ง ์์๋ณด์
JavaScript, what r u?
- ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๋ค.
- ๋ญ๋ง์ด๋? โท ํ๋์ ํ๋ก๊ทธ๋จ์ ๋์์ ํ๋์ ์ฝ๋๋ง ์คํํ ์ ์๋ค.
- one thread === one call stack === one thing at a time (๋ฉํฐ๊ฐ ์๋ผ!!)
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ Memory Heap & Call Stack์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. (๊ฐ์ฅ ์ ๋ช
ํ ๊ฒ์ด ๊ตฌ๊ธ์ V8 Engine)
- Memory Heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ์ฅ์
- ex) ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋จ์ ์ ์ธํ ๋ณ์, ํจ์ ๋ฑ์ด ๋ด๊ธด๋ค
- Call Stack : Memory Heap์ ์๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋๋ค์ด ์คํ๋ ๋ ํ๋์ฉ stack์ ํํ๋ก ์์ด๋ ์ฅ์
- ์ด๋, ๋๊ธฐ ํจ์๋ค์ ๊ทธ๋๋ก ์คํ๋๊ณ , ๋น๋๊ธฐ ํจ์๋ค์ Web API๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉฐ ์ผ์ ๋ถ๋ฐฐํฉ๋๋ค.
- stack : ์๋ฃ๊ตฌ์กฐ ์ค ํ๋, ์ ์ ํ์ถ(LIFO, Last In First Out)์ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
- Memory Heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ์ฅ์
- ๋ฐ๋ผ์, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด์ง๋ง, Web API, Callback Queue, Event Loop ๋๋ถ์ ๋ฉํฐ ์ค๋ ๋์ฒ๋ผ ๋ณด์ฌ์ง๋ค!! ๐
Web API
- ์๊ธฐ ๊ทธ๋ฆผ์ ์ค๋ฅธ์ชฝ์ ๋ณด๋ฉด ๋ณด๋ฉด, Web API๋ JS Engine ๋ฐ์ ๊ทธ๋ ค์ ธ ์๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API๋ก, DOM, Ajax, Timeout ๋ฑ์ด ์๋ค.
- Call Stack์์ ์คํ๋ ๋น๋๊ธฐ ํจ์๋ Web API์์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๊ณ ๊ทธ๋์์ Call Stack์ ๋๋จธ์ง ๋๊ธฐ ํจ์๋ค์ ์ฒ๋ฆฌํ๋ค.
- Web API๋ ๋น๋๊ธฐ ํจ์๋ค์ ์ฒ๋ฆฌํ๋ฉฐ ์์ ์ด ์๋ฃ๋ ๋น๋๊ธฐ ํจ์๋ค์ Callback Queue๋ก ๋๊ฒจ์ค๋ค.
Callback Queue
- ๋น๋๊ธฐ ํจ์๋ค์ ๋ณด๊ดํ๋ ์ฅ์
- Event Loop์์ ๋น๋๊ธฐ ํจ์๋ฅผ ๊บผ๋ด ์ ๊น์ง๋ ๊ณ์ Queue ๋ฐฉ์์ผ๋ก ๋ณด๊ดํ๊ฒ ๋๋ค.
- Queue: ์๋ฃ๊ตฌ์กฐ ์ค ํ๋, ์ ์ ์ ์ถ(FIFO-First In First Out)์ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
Event Loop
- Call Stack๊ณผ Callback Queue์ ์ํ๋ฅผ ๊ณ์ ๊ฐ์ํ๋ฉฐ
- Call Stack์ ํจ์๋ค์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด
- Callback Queue์ ์๋ ๋น๋๊ธฐ ํจ์๋ค์ Call Stack์ ๋ฐ์ด๋ฃ๋๋ค.
- ๊ทธ ํ, Call Stack์์ ๋น๋๊ธฐ ํจ์๋ฅผ ์คํ์ํจ๋ค.
์ ๋ฆฌํ๋ค๋ฉด?
- V8 ์์ง์์ ์ฝ๋๊ฐ ์คํ๋๋ฉด, Call Stack์ ์์ธ๋ค.
- Stack์ ์ ์ ํ์ถ์ ๋ฐฉ์์ ๋ฐ๋ผ ์ ์ผ ๋ง์ง๋ง์ ๋ค์ด์จ ํจ์๊ฐ ๋จผ์ ์คํ๋๋ฉฐ, Stack์ ์์ฌ์ง ํจ์๊ฐ ๋ชจ๋ ์คํ๋๋ค.
- ๋น๋๊ธฐ ํจ์๊ฐ ์คํ๋๋ค๋ฉด, Web API๊ฐ ํธ์ถ๋๊ณ
- Web API๋ ๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑํจ์๋ฅผ Callback Queue์ ๋ฐ์ด๋ฃ๋๋ค.
- Event Loop๋ Call Stack์ด ๋น ์ํ๊ฐ ๋๋ฉด
- Callback Queue์ ์๋ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ๋ถํฐ Call Stack์ผ๋ก ์ด๋์ํจ๋ค.
โถ ์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ํ๋์ ํฑ(tick)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
'DEV_IN > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Inside JavaScript] Chapter 1. ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ๊ฐ์ (0) | 2023.03.27 |
---|---|
Module (2) | 2023.02.28 |
This (6) | 2023.02.28 |
Prototype (5) | 2023.02.28 |
priceFormatter (0) | 2023.02.08 |
Comments