ํฐ์คํ ๋ฆฌ ๋ทฐ
์ฑ๊ธ ์ฐ๋ ๋(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
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ์ฑ๊ธ ์ฐ๋ ๋์ผ๊น? :: chanyeong
์๋ฐ์คํฌ๋ฆฝํธ๋ผ๋ ์ธ์ด๋ ์ฑ๊ธ ์ฐ๋ ๋ ์ธ์ด๋ผ๊ณ ์๋ ค์ ธ์๋ค. ๋ณดํต ์ฑ๊ธ ์ฐ๋ ๋๋ผ๊ณ ํ๋ฉด ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ํํ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ์น ์ฌ์ดํธ
chanyeong.com
https://velog.io/@jaehyeon23/Javascript-%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9CThread
Javascript ์ ์ค๋ ๋(Thread)
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฉ์ธ ์ฐ๋ ๋์ธ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ฑ๊ธ ์ฐ๋ ๋์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฑ๊ธ ์ฐ๋ ๋ ์ธ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.ํ์ง๋ง ์ด๋ฒคํธ ๋ฃจํ๋ง ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ NodeJS๊ฐ์
velog.io
Javascript ๋์์๋ฆฌ (Single thread, Event loop, Asynchronous)
Javascript๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
medium.com
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์น ์คํ ๋ฆฌ์ง(localStorage, sessionStorage)๋? (0) | 2022.07.13 |
---|---|
[JavaScript] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ ๋ฐฉ์ (0) | 2022.06.20 |
- Total
- Today
- Yesterday
- http
- ํ๋กํผํฐ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- JavaScript
- ์ ์ญ ๋ณ์
- ๋ฐฑ์ค node.js
- ๋ ์์ปฌ ํ๊ฒฝ
- ํฌํฌ์ธํฐ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- fp
- ํ๋ก๊ทธ๋๋จธ์ค
- ํ๋กํ ์ฝ
- ์๊ณ ๋ฆฌ์ฆ
- map
- TDD
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋์์ธ ํจํด
- ๋คํธ์ํฌ
- ์ด์์ฒด์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค javascript
- ๋ฐฑ์ค
- Baekjoon
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- git
- ์นด์นด์ค ์ธํด
- ์๋ฐ
- ์ด๋ถํ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |