ํฐ์คํ ๋ฆฌ ๋ทฐ
์ฑ๊ธ ์ฐ๋ ๋(Single Thread)
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฉ์ธ ์ค๋ ๋์ธ ์ด๋ฒคํธ ๋ฃจํ๋ก ๊ตฌ์ฑ๋์ด ์ฑ๊ธ์ฐ๋ ๋๋ก ๋์ํ๋ ์ธ์ด์ ๋๋ค.
ํ์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฒคํธ ๋ฃจํ๋ง ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ Node.JS๊ฐ์ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค.
์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ฒด๋ ์ฑ๊ธ ์ฐ๋ ๋์ด์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ์ฑ๊ธ ์ฐ๋ ๋๊ฐ ์๋!
(** ์ฑ๊ธ ์ค๋ ๋๋ ๋ณดํต ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ํํ ์ ์๋ค๊ณ ์๋ ค์ก์์)
์ฑ๊ธ ์ฐ๋ ๋๋ก ํ๋ฒ์ ์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌ(Asynchronous)
๊ธฐ์กด ๋๊ธฐ์ ์์ฒญ์ ์ฝ๋๋ฅผ ํ์ค ํ์ค ์ฐจ๋ก๋๋ก ์คํํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์์ ์๊ฐ์ด ๊ธธ์๋ก ์๊ฐ ๋ฐ ์์์ ๋ญ๋น๊ฐ ์ฌํด์ง๋๋ค.
๋ฐ๋ผ์ ํ๋์ ์์ฒญ์ด ์๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ๋์์ ๋ค๋ฅธ ์์ ์ ์คํํ๋ ๋น๋๊ธฐ ํธ์ถ๋ก ์ด๋ฅผ ๊ทน๋ณตํฉ๋๋ค.
ex) setTimeout, ์ด๋ฒคํธ๋ฆฌ์คํฐ, $.ajax()์ ๊ฐ์ด ์ฒ๋ฆฌ๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ฒญ์ Web API ๊ณต๊ฐ์ผ๋ก ์ด๋์ํจ ํ, ๋์ค์ ์ฒ๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ๋ฐํ์ ๊ณผ์
์ฐ์ , ๋น๋๊ธฐ๋ฅผ ๋์ํ๋๋ฐ ํ์ํ ์์๋ ์๋์ ๊ฐ์ด 4๊ฐ์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Call Stack: ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ํํด์ผ ํ ํจ์๋ค์ ์์ฐจ์ ์ผ๋ก ์คํ์ ๋ด์ ์ฒ๋ฆฌ
- Web API: ์น ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API๋ก AJAX๋ Timeout๋ฑ์ ๋น๋๊ธฐ ์์ ์ ์คํ
- Callback Queue(Task Queue): Web API์์ ๋๊ฒจ๋ฐ์ Callbackํจ์๋ฅผ ์ ์ฅ
- Event Loop: Call Stack์ด ๋น์ด์๋ค๋ฉด Task Queue์ ์์ ์ Call Stack์ผ๋ก ์ฎ๊น
๋ค์๊ณผ ๊ฐ์ ์ฝ๋์ ๋์๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
setTimeout(() => console.log('async A'), 1000);
console.log('B');
'async A'์ฝ๋๊ฐ ์์ ์์์๋, ๋น๋๊ธฐ ์ฝ๋๋ผ ๋์ค์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋์๊ณผ์ ์ ์์ธํ ์ดํด๋ณด๋ฉด,
1. 'B'๊ฐ Call Stack์ ์์ด๊ณ , ์ด๋ ๋ฐ๋ก ์คํ๋์ด ์ ๊ฑฐ๋ฉ๋๋ค.
2. Event Loop๋ Call Stack์ด ๋น์ด์๋์ง ํ์ธํฉ๋๋ค.
3. Call Stack์ด ๋น์ด์๋ค๋ฉด, Task Queue์ ๋๊ธฐํ๊ณ ์๋ callback์ด Call Stack์ผ๋ก ์ด๋ํ์ฌ ์คํ๋ฉ๋๋ค.
์ด๋, setTimeout์ callbackํจ์๋ ๋ฐ๋ก Call Stack์ ์์ด๋ ๊ฒ์ด ์๋๋ผ, ์คํ๋๊ณ , Web API์์ timer๊ฐ ์์ฑ๋์ด,
์์ฑ๋ ์์ ์ ๊ธฐ์ค์ผ๋ก 1์ด ํ์ callbackํจ์๊ฐ Task Queue๋ก ์ ๋ฌ๋์ด ๋๊ธฐํฉ๋๋ค.
๋ฐ๋ผ์ setTiemout์ด 0์ด์ฌ๋ B๋ณด๋ค ๋ฆ๊ฒ ์คํ๋ฉ๋๋ค.
์ด๋ ๊ฒ JS์์ง์ ํด๋น ์์ ์ด ๋๋ ๋๊น์ง ์ด๋ ํ ์์ ์ ์ํํ ์ ์๋๋ก ๋๊ธฐ ์์ ์ด ๋ค๋ฅธ ์ฝ๋๋ค์ Blockingํ์ง๋ง,
promise, async/await ๋ฑ์ ๋น๋๊ธฐ ์์ ์ ํตํด Non-Blocking์ ์คํํฉ๋๋ค.
https://chanyeong.com/blog/post/44
https://velog.io/@jaehyeon23/Javascript-%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9CThread
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์น ์คํ ๋ฆฌ์ง(localStorage, sessionStorage)๋? (0) | 2022.07.13 |
---|---|
[JavaScript] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ ๋ฐฉ์ (0) | 2022.06.20 |
- Total
- Today
- Yesterday
- ์ฝ๋ฉํ ์คํธ
- ๋์์ธ ํจํด
- ํฌํฌ์ธํฐ
- ํ๋กํผํฐ
- ๋ฐฑ์ค javascript
- TDD
- map
- Baekjoon
- git
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ด๋ถํ์
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค node.js
- ์นด์นด์ค ์ธํด
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์ ์ญ ๋ณ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- fp
- ํ๋กํ ์ฝ
- JavaScript
- ๋ฐฑ์ค
- ์๋ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ์ด์์ฒด์
- ๋ ์์ปฌ ํ๊ฒฝ
- http
- ๋คํธ์ํฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |