[JavaScript] ๋™๊ธฐ & ๋น„๋™๊ธฐ
๐Ÿฆœ Computer Language/JavaScript

[JavaScript] ๋™๊ธฐ & ๋น„๋™๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด์ „ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋Š” ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

์ด๋Ÿฐ 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๋‹ค^-^

 

์ฝœ๋ฐฑ์ง€์˜ฅ