๐ฉ๐ป๐พ
[์ธํ๋ฐ/JS] ๋๊ธฐ & ๋น๋๊ธฐ ๊ฐ๋ ๋ณธ๋ฌธ
<์๋ฐ ์คํฌ๋ฆฝํธ์ ์ฑ๊ธ ์ค๋ ๋ ์์ ์ํ๋ฐฉ์>
์๋ฐ ์คํฌ๋ฆฝํธ๋ ์ฝ๋๊ฐ ์์ฑ๋ ์์๋๋ก ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ด์ ์์ ์ด ์งํ ์ค์ผ ๋๋ ๋ค์ ์์ ์ ์ํํ์ง ์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค.
(= ์ฆ, ๋จผ์ ์์ฑ๋ ์ฝ๋๋ฅผ ๋จผ์ ๋ค ์คํํ๊ณ ๋ ๋ค, ๊ทธ ๋ค์ ์์ฑ๋ ์ฝ๋๋ฅผ ์คํํจ)
โก๏ธ ๋๊ธฐ ๋ฐฉ์์ ์ฒ๋ฆฌ
์ด๋ฐ ๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋จ์ ์ ์ ์ฌ์ง์ taskB์ฒ๋ผ ํ๋์ ์์ ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ, ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ๋ชจ๋ ์์ ์ด ์ฌ์คํ ๋๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์ธ ์์ ์ ํ๋ฆ์ด ๋๋ ค์ง๋ค๋ ์ ์ด ์๋ค.
โก๏ธ ๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฌธ์ ์
<๋ฉํฐ ์ค๋ ๋>
๊ทธ๋ ๋ค๋ฉด ์ฝ๋๋ฅผ ์คํํ๋ ์ผ๊พผ Thread๋ฅผ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ธ 'MultiThread' ๋ฐฉ์์ผ๋ก ์๋์ํค๋ฉด ์ ์ฌ์ง์ฒ๋ผ ์์ ๋ถํ ์ด ๊ฐ๋ฅํ๋๊น ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์์ด๋ ๋ค๋ฅธ ์ผ๊พผ Thread์๊ฒ ์์ ์ ์ง์ํ๋ฉด ๋๋๊น ๊ด์ฐฎ์ง ์์๊น? ์ถ์์ง๋ง
'์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค๋ ์ '
๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ฑ๊ธ ์ค๋ ๋ ๋ฐฉ์์ ์ด์ฉํ๋, ์ ์ฌ์ง์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ ์์ ์ ๊ทธ๋ฅ ๋์์ ์คํ์ํจ๋ค.
โก๏ธ ๋น๋๊ธฐ ๋ฐฉ์
๐ก ์ด์ ์ฝ๋๋ก ๋๊ธฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ณด์!
// ๋๊ธฐ์ ๋ฐฉ์
function taskA() {
console.log("A Task End");
}
taskA();
console.log("\nCode End");
๋จผ์ ๋๊ธฐ์ ๋ฐฉ์ ์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด, ์์ฑ๋ ์์๋๋ก ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒ์ ์ค๋ฅธ์ชฝ ์ฝ์์์ ํ์ธํ ์ ์๋ค.
์ด์ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ํ ๋ฐ ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ด์ฅ ๋น๋๊ธฐ ํจ์์ธ setTimeout()๋ฅผ ์ฌ์ฉํด์ ์ง์ฐ์๊ฐ์ ์ค์ ํ ๊ฑฐ๋ค. (์ด๋, ์ง์ฐ์๊ฐ์ ๋ฐ๋ฆฌ์ด(ms)๋ก ๋จ์๋ก ๋ฐ๊ณ , 1000ms=1s์ด๋ค.)
๊ทธ๋์ ์ด setTimeout() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
// ๋น๋๊ธฐ์ ๋ฐฉ์
function taskA(a, b, cb) {
setTimeout(() => {
const res = a + b;
cb(res);
}, 3000);
}
function taskB(a, cb) {
setTimeout(() => {
const res = a * 2;
cb(res);
}, 1000);
}
function taskC(a, cb) {
setTimeout(() => {
const res = a * -1;
cb(res);
}, 2000);
}
taskA(3, 4, (res) => {
console.log("A TASK RESULT : ", res);
});
taskB(9, (res) => {
console.log("B TASK RESULT : ", res);
});
taskC(17, (res) => {
console.log("C TASK RESULT : ", res);
});
console.log("Code End");
์ ์ฝ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ์ง์ฐ์๊ฐ์ด ์๋ console.log("Code End")๊ฐ ๊ฐ์ฅ ๋จผ์ ์คํ๋๊ณ ,
๊ทธ ๋ค์์ผ๋ก ์ง์ฐ์๊ฐ์ด ์งง์์์ธ taskB-> taskC->taskA๊ฐ ์คํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS/React] 1๏ธโฃ ๊ฐ๋จํ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ (0) | 2023.04.13 |
---|---|
[JS] ํ๋ก๊ทธ๋จ์์ ์ ๋ ฅ ๋ฐ๊ณ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ (0) | 2023.03.21 |