๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

[์ธํ”„๋Ÿฐ/JS] ๋™๊ธฐ & ๋น„๋™๊ธฐ ๊ฐœ๋… ๋ณธ๋ฌธ

Language/JavaScript

[์ธํ”„๋Ÿฐ/JS] ๋™๊ธฐ & ๋น„๋™๊ธฐ ๊ฐœ๋…

์ฅฌ์Šค์ด 2023. 4. 9. 21:36
728x90

<์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ž‘์—… ์ˆ˜ํ–‰๋ฐฉ์‹> 

 

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

(= ์ฆ‰, ๋จผ์ € ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋‹ค ์‹คํ–‰ํ•˜๊ณ  ๋‚œ ๋’ค, ๊ทธ ๋’ค์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ)

โžก๏ธ ๋™๊ธฐ ๋ฐฉ์‹์˜ ์ฒ˜๋ฆฌ

 

์ด๋Ÿฐ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ์˜ ๋‹จ์ ์€ ์œ„ ์‚ฌ์ง„์˜ 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๊ฐ€ ์‹คํ–‰๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90
Comments