๋๊ธฐ์ ๋น๋๊ธฐ
Syncronous & Asychronous
1. ์ผ๋ฐ์ ์ธ ๋งฅ๋ฝ์์์ ๋๊ธฐ(Sync)
์์์ ๋ณด๋ค๊ฐ ์๋ง์ด ์์๋ณด๋ค ๋น ๋ฅด๊ฑฐ๋ ๋ฆ๊ฒ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ, '์ฑํฌ(Sync)๊ฐ ์ ๋ง๋๋ค' ๋ผ๋ ๋ง์ ์ฌ์ฉํ๋ค. ์ด๋ ๋น๋๊ธฐ(Asychronous)๋ฅผ ์๋ฏธํ๋ค.
์ด๋์ ์ฑํฌ๋ Sync๋ฅผ ์๋ฏธํ๋๋ฐ, sysnchronous์ ์ค์๋ง๋ก์, '๋๊ธฐ'ํน์ '๋์์ ์ผ์ด๋๋, ํ ๊ฐ์ง ๋, ๊ธฐ๋ค๋ฆด ๊ธฐ)' ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2. ํ๋ก๊ทธ๋๋ฐ์์์ ๋๊ธฐ(Sync)์ ๋น๋๊ธฐ(Async)
๋๊ธฐ, Synchronous
์ด์ ์์ ์ด ๋ค ์ํ๋์ง ์์ ๊ฒฝ์ฐ, ๋ค์ ์์ ์ ์ํ๋์ง ์์ ๊ฒฝ์ฐ, ๋ค์ ์์ ์ ์ํํ์ง ๋ชปํ๋ ์ํ๊ฐ ๋๋ค.
์ด๋ฅผ (Blocking) ์ด๋ผ๊ณ ํ๋ค.
ex) ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ์ ํ๋ฉด์ด ์๋ก๊ณ ์นจ ๋๋ฉด์ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ ํ ๋์ด์ผ ํ ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ ๋์ ์ฌ์ฉ์๋ ํด๋น ํ๋ฉด์ด ๋์ฌ ๋ ๊น์ง ๋ค๋ฅธ ๋์์ ํ ์ ์๊ฒ ๋๋ค.
๋น๋๊ธฐ, Asynchronous
์ด์ ์์ ์ ์ํ ์ฌ๋ถ์ ์๊ด์์ด ๋ค์ ์์ ์ ๊ฐ๋ณ๋ก ์ํ(Non-Blocking)
๋น๋๊ธฐ ๋ฐฉ์์ ์ฒ๋ฆฌ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋ ๋์ ๋๊ธฐ ๋ฐฉ์์ ๋นํด ๊ฒฐ๊ณผ ํ๋ฉด์ด ๋์ค๋ ์๊ฐ ๋์ ๋ค๋ฅธ ์์ ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
// ์ฝ๋๋ก ๋ณด๋ ๋๊ธฐ ๋น๋๊ธฐ
๋๊ธฐ์ ๋น๋๊ธฐ์
ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ ์ ํ๋์ ๋ฐ๋ผ ๋๋๋ค,
call stack, task queue ์ด๋ task queue๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ ๋ ์๋ฅผ๋ค์ด API์ธ setTimeout ์์ first ํจ์๊ฐ ์๋ค๋ฉด callback์์ ๋ฐ๋ก task queue๋ก ๋ค์ด๊ฐ๋ค.
ex) function first() { console.log('first() called'); }
function second() { setTimeout(() => console.log('second() called'), 1000); }
function third() { console.log('third() called'); }
first();
second();
third();
//
//ํ์ฌ ์คํ ์ค์ธ ์์
์ด ์์ง ์ข
๋ฃ๋์ง ์์ ์ํ๋ผ๊ณ ํด๋, ๋ค์ ์์
์ ๊ณง๋ฐ๋ก ์ํํ ์ ์๋ ๋ฐฉ์
function first() {
console.log('first() called');
}
function second() {
console.log('second() called');
}
setTimeout(first, 3 * 1000);
second();
//
function first() {
console.log('first() called');
}
function someLongWork() {
console.log('์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ํ ์ค...');
}
function second() {
console.log('second() called');
}
first();
someLongWork();
second();
์ค์ต ๋งํฌ
'๊ฐ๋ฐ ์ง์, ์คํฌ๋ฆฝํธ > JavaScript, TS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
fetch API (1) | 2023.12.10 |
---|---|
[Express.js] express.static() ์ ์ ํ์ผ ์๋น์ค (1) | 2023.12.03 |
Web API (์ข๋ ์ ๋ฆฌ ํ์) (0) | 2023.11.29 |
์ด๋ฒคํธ ํธ๋ค๋ฌ (0) | 2023.11.29 |
Call stack ๊ณผ Task Queue (1) | 2023.11.28 |
๋๊ธ