์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๊ฐ ์์ฑ๋ ์์๋๋ก ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ด์ ์์ ์ด ์งํ ์ค์ผ ๋๋ ๋ค์ ์์ ์ ์ํํ์ง ์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค.
์ด๋ฐ Task ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๊ธฐ ๋ฐฉ์์ ์ฒ๋ฆฌ๋ผ๊ณ ํ๋ค.
function TaskA() {
console.log("TASK A");
}
function TaskB() {
console.log("TASK B");
}
function TaskC() {
console.log("TASK C");
}
TaskA();
TaskB();
TaskC();
๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋จ์ ์ ํ๋์ ์์ ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด
๋ชจ๋ ์์ ์ด ํด๋น ์์ ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง STOP ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ๋ฆ์ด ์ง์ฒด๋๋ค.
์ฆ, ์ฑ๋ฅ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ค๋ฅธ ์ธ์ด(C, C++ ... )์์๋ ๋ฉํฐ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๋์ , ์๋ฐ์คํธ๋ฆฝํธ์์๋ ๋น๋๊ธฐ ๋ฐฉ์(non-blocking)์ผ๋ก ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ ๋์์ ์คํ์์ผ ๋จผ์ ์์ฑ๋ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ๋ค.
์๋ setTimeout()ํจ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ๋น๋๊ธฐ ํจ์์ด๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ฐ์ ํ์ฉํ๊ณ ์ ํ ๋๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
function taskA(a, b, cb) {
setTimeout(() => { // ๋น๋๊ธฐ ํจ์์ ํธ์ถ
const res = a + b;
cb(res);
}, 2000);
}
function taskB(a, b, cb) {
setTimeout(() => {
const res = a * b;
cb(res);
}, 1000);
}
taskA(3, 4, (res) => {
console.log(`A TASK RESULT : ${res}`);
});
taskB(3, 4, (res) => {
console.log(`B TASK RESULT : ${res}`);
});
console.log("์ฝ๋ ๋");
/* ๋น๋๊ธฐ ๋ฐฉ์์ด๋ฏ๋ก TaskA์ TaskB๊ฐ ๋์์ ์์ํ์ฌ B๊ฐ ๋จผ์ ์ถ๋ ฅ๋๊ณ ๊ทธ ํ, A๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.*/
//์ฝ๋ ๋
//B TASK RESULT : 12
//A TASK RESULT : 7
์ด๋ ๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฝ๋ฐฑํจ์ ๊ฐ์ ์ด์ฉํ๋ค ๋ณด๋ฉด, ์๋์ ๊ฐ์ ์ผ๋ช '์ฝ๋ฐฑ ์ง์ฅ'์ด ๋ํ๋๋ค. ์ฝ๋ฐฑ ํจ์๋ฅผ ํจ์๋ก ์ ๋ฌํ๋ ๊ณผ์ ์์ ์ฝ๋ฐฑ ์์ ๋๋ค์ ํจ์ ํธ์ถ์ด ๋ฐ๋ณต๋์ด ๊ฒฐ๊ตญ ํจ์๊ฐ ๊ต์ฅํ deepํด์ง๋ ํ์์ด๋ค.
function task() {
setTimeout(() => {
console.log('a');
setTimeout(() => {
console.log('b');
setTimeout(() => {
console.log('c');
}, 0);
}, 0);
}, 0);
}
task();
// a
// b
// c
์ด๋ฌํ ํ์์ ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ธ Promise ๋ก ํด๊ฒฐํ ์ ์๋ค๊ณ ํ๋ค. ๋ค์ ๊ธ์ Promise๋ค^-^
'๐ฆ Computer Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] async & await | ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2022.03.13 |
---|---|
[JavaScript] Promise | ์ฝ๋ฐฑ์ง์ฅ์ ํ์ถํ๋ ๋ฐฉ๋ฒ (0) | 2022.03.11 |
[JavaScript] spread | ์ ๊ฐ ์ฐ์ฐ์ (0) | 2022.03.03 |
[JavaScript] ๋น๊ตฌ์กฐํ ํ ๋น ๊ทธ๋ฆฌ๊ณ SWAP (0) | 2022.03.03 |
[JavaScript] Truthy & Falsy (0) | 2022.02.24 |