์์นจ 11์๋ถํฐ ํ์๋ค๊ณผ ์ด์ ๋ฐฐ์ด ๋ด์ฉ์ ์ด์ผ๊ธฐํ๋๋ฐ,,,
๋ ์์ง ๊ฐ์ผํ ๊ธธ์ด ๋จผ ๊ฒ ๊ฐ๋ค..๐ข
๋๋ ๋์์ด ๋๋ ํ์์ด ๋ ์ ์๋๋ก ์ด์ฌํ ๋
ธ๋ ฅํด์ผ๊ฒ ๋ค.
์ค๋์ ๊ณ์ ํท๊ฐ๋ ธ๋ ์ด๋ฒคํธ ๋ฃจํ์ ๋์ ๊ณผ์ ์ ๋ํด ํ์คํ ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํ๋ค.
์ฒซ์งธ๋ ๋ณด๋ค ๋ ์ด๋ ค์ด ๊ฒ๋ค์ด ์ฐ์์ ์์์ ธ๋์๋ค.
๊ทผ๋ฐ ๊ฐ์ฌ๋ ๊ฐ์๋ ฅ ์ต๊ณ ์๋ค. ๊ถ๊ธ์ฆ์ด ์๊ธฐ๋ ํ๋ฆ๋๋ก ๊ฐ์๋ฅผ ํด์ฃผ์
์ ๋๋ฌด ์ข๋ค.
1. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
2. ๊ฐ์ฒด์งํฅ๊ณผ ํ๋กํ ํ์ - ๐ ํ๋กํ ํ์ ํฌ์คํ ํ์
3. ์ด๋ฒคํธ ๋ฃจํ
4. ์ ๋์ฝ๋
5. ์ ๊ท ํํ์ - ๐ ๋ณต์ต ํ์!!!
6. ์ฟ ํค์ ์ธ์ , ์น ์คํ ๋ฆฌ์ง
7. ์๋ฃ๊ตฌ์กฐ
8. ์๊ฐ ๋ณต์ก๋
๋ณต์ตํด์ผํ ๊ฒ๋ค์ด ๋๋ฌด ๋ง์ง๋ง,,,
์ค๋์ ๋ค๋ฃฐ ์ฃผ์ ๋ ์ด๋ฒคํธ ๋ฃจํ์ ๋์ ๊ณผ์ ์ด๋ค
์๋ฐ์คํฌ๋ฆฝํธ๋ Single Thread๋ก ๋์ํ๋ค๋ ์ฌ์ค์ ๋ชจ๋ ์๊ณ ์์ ๊ฒ์ด๋ค.
๋ฐ๋ก ๋ฐ๋ก ์ด๋ฒคํธ ๋ฃจํ๋ผ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํฌํจ๋์ด์์ง ์๊ณ , ๋ธ๋ผ์ฐ์ , Node.js ์์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
๊ฒฐ๊ตญ, ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ง์ Single Thread์ง๋ง ๋ธ๋ผ์ฐ์ ๋ Multi Thread๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋์ ์คํ์ด ๊ฐ๋ฅํ๋ค!
์ค์ต ์ฝ๋
์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ฉด ์ ์ญ ์ค์ฝํ ๋ด์์ ์คํ
setTimeout์ด ์คํ๋์ด call stack์ ์์ด๋ฉด,
์น ๋ด๋ถ์ ์ผ๋ก Web API ์คํ
call stack์์ ์ข
๋ฃ
foo ํจ์ ์คํ
call stack์ foo ํจ์ ์์
console.log ์คํ
call stack์์ ์ข
๋ฃ
๊ฒฐ๊ณผ์ ์ผ๋ก ์คํฌ๋ฆฝํธ๊ฐ ๋๋ฌ๊ธฐ ๋๋ฌธ์ call stack์ ๋น์ด ์๋ ์ํ
0.1์ด๊ฐ ์ง๋ ํ,
Web API์์ callback ํจ์๋ฅผ Task Queue๋ก ๋ฐ์ด๋ฃ๊ธฐ
call stack์ด ๋น์ด์๋ค๋ฉด,
callback ํจ์๋ Task Queue์์ call stack์ผ๋ก ์ด๋
=> ์ด๋ฌํ ๊ณผ์ ์ 'ํฑ(Tick)'์ด๋ผ ํจ
Task Queue๋ FIFO(์ ์ ์ ์ถ) ๋ฐฉ์์ผ๋ก ๋์
๊ฒฐ๊ณผ์ ์ผ๋ก, foo -> bar์ ์์๋ก ์ถ๋ ฅ ๋จ์ ํ์ธํ ์ ์๋ค.
์ ์ด๋ฌ ์ด๋ฌํ ๊ณผ์ ์ด๊ฒ ์งํ๊ณ ๊ณต๋ถ๋ฅผ ๊ฒ์๋ฆฌํ๋ ๋์ ๊ณผ๊ฑฐ๋ฅผ ๋ฐ์ฑํ๋ค...
ํ์คํ ๊ฐ์๋ฃ๊ณ , ์ง์ ์ฐพ์๋ณด๋ฉฐ ์ด๋ค ๋ก์ง์ธ์ง ๊นจ์ฐ์น๊ณ , ๋ง์ง๋ง์ผ๋ก ๊ธ์ ์์ฑํ๋ ์ด๋ฒคํธ ๋ฃจํ์ ๋ํด ํ์คํ ์ดํดํ๋ค...
์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๋ฐ๋๋ฐ ์ด๋ ค์ด ๋๋ ๋
์...
๊ผญ 5๊ฐ์ ์์ ์ ๋ณตํ ๊บผ๋ค!!!
์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๋ฒคํธ ๋ฃจํ
https://kyounghwan01.github.io/blog/JS/JSbasic/eventLoop/
์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๋ฒคํธ ๋ฃจํ
https://meetup.toast.com/posts/89