๐Ÿ“• Language/Java

[Java] ๋™๊ธฐ/๋น„๋™๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น

a n u e 2022. 2. 12. 10:29

์‹ค๋ฌด๋ฅผ ์ ‘ํ•˜๋ฉด์„œ ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•  ์ผ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ, ๋น„๋™๊ธฐ์— ๋Œ€ํ•˜์—ฌ์„œ๋Š” ์‰ฝ๊ฒŒ ์ ‘ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜, ๋ธ”๋กœํ‚น์ด๋ผ๋Š” ๊ฐœ๋…์€ ์ƒ์†Œํ–ˆ๋‹ค. ์–ธ๋œป๋ณด๋ฉด ๋™๊ธฐ์™€ ๋ธ”๋กœํ‚น์€ ๋™์ผ ๊ฐœ๋…๊ฐ™๊ธฐ๋„ ํ•˜์ง€๋งŒ, ํฐ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์—†๋Š” ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? ๋งŽ์€ ๊ธ€์„ ์ฝ์—ˆ์ง€๋งŒ, ๊ทธ๋ฆผ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ธ€์ด ๊ฐ€์žฅ ์ดํ•ด๊ฐ€ ์‰ฌ์› ๋‹ค. ๋‚˜๋„ ๋” ์ •ํ™•ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•˜์—ฌ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด์•˜๋‹ค.

 

๋ชฉ์ฐจ
1. ๋™๊ธฐ(Synchronous)
2. ๋น„๋™๊ธฐ(Asynchronous)
3. ๋ธ”๋กœํ‚น(Blocking)
4. ๋…ผ๋ธ”๋กœํ‚น(non-Blocking)


๋™๊ธฐ(Synchronous)

 ์ž‘์—…์˜ ์ˆ˜ํ–‰ ์ฃผ์ฒด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ. ๊ทธ ์ž‘์—…๋“ค์ด '์‹œ๊ฐ„'์„ ์„œ๋กœ ๋งž์ถ˜๋‹ค๋ฉด ๋™๊ธฐ์ด๋‹ค. 

์‹œ๊ฐ„์„ ๋งž์ถ˜๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฑธ๊นŒ?

๋งŒ์•ฝ ์ž‘์—…์ด 2๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋‘ ๊ฐœ์˜ function์ด ์„œ๋กœ ์ž‘์—…์„

1)๋™์‹œ์— ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜

2)๋™์‹œ์— ๋๋‚ด๊ฑฐ๋‚˜

3)ํ•˜๋‚˜๊ฐ€ ๋๋‚˜๋ฉด, ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ์ฐจ๋ก€๋กœ ์‹คํ–‰ํ•œ๋‹ค๋ฉด

๋ฐ”๋กœ ๋™๊ธฐ์ด๋‹ค.

 

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

A, B ๋™์‹œ์— ์‹œ์ž‘ ๋˜๋Š”, ๋™์‹œ์— ์ข…๋ฃŒ

 

A๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„, ์ฐจ๋ก€๋กœ B๊ฐ€ ์‹คํ–‰

 

์†Œ์Šค๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฒฐ๊ณผ ๊ฐ’์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ž‘์—…์ด ์ฐจ๋ก€๋กœ ์‹คํ–‰๋˜๋ฉฐ ์ฒซ๋ฒˆ์งธ ์ž‘์—…์ด ๋๋‚˜์•ผ ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

console.log(1);
console.log(2);
console.log(3);

//๊ฒฐ๊ณผ ๊ฐ’
//123

 

์ด๊ฒƒ์„ ์ œ์–ด๊ถŒ๊ณผ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

(์ œ์–ด๊ถŒ์ด๋ž€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ถŒ๋ฆฌ์ด๊ณ , ๊ฒฐ๊ณผ๊ฐ’์ด๋ž€ ํ•จ์ˆ˜์˜ return๊ฐ’์ด๋‹ค.)

๋ถ€๋ชจํ•จ์ˆ˜์ธ run์—์„œ A, B๋ฅผ callํ•œ๋‹ค. ์ด๋•Œ, ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด

A๋Š” ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  A์ž‘์—…์„ ๋งˆ์นœ ๋’ค, ๋ถ€๋ชจํ•จ์ˆ˜์ธ run์—๊ฒŒ ๊ฒฐ๊ณผ๊ฐ’์„ ์ฃผ๋ฉด์„œ ๋™์‹œ์— ์ œ์–ด๊ถŒ์„ ํ•จ๊ป˜ ๋Œ๋ ค์ค€๋‹ค.

function run {
   A();
   B();
}

function A {
   console.log('Aํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.');
}

function B {
   console.log('Bํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.');
}

 


๋น„๋™๊ธฐ(Asynchronous)

 ์ž‘์—…์˜ ์ˆ˜ํ–‰ ์ฃผ์ฒด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ. ๋™๊ธฐ์™€์˜ ์ฐจ์ด์ ์€, ๋™๊ธฐ์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ!

์ž‘์—…์ด 2๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, A์™€ B ํ•จ์ˆ˜๋Š” ์„œ๋กœ๊ฐ€ ์ž‘์—…์„ ์–ธ์ œ ์‹œ์ž‘ํ•˜๋Š”์ง€, ์–ธ์ œ ๋๋‚˜๋Š”์ง€ ์ „ํ˜€ ๊ด€์‹ฌ์ด ์—†๋‹ค.

๋‘ ์ฃผ์ฒด๊ฐ€ ์„œ๋กœ์˜ ์‹œ์ž‘์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ์‹œ๊ฐ„๊ณผ ์ƒ๊ด€์—†์ด, ๊ฐ์ž์˜ ์‹œ์ž‘/์ข…๋ฃŒ์‹œ๊ฐ„์„ ๊ฐ€์ง„๋‹ค.

์š”์ฒญ๋งŒ ํ•ด๋†“๊ณ  ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์žˆ๋‹ค๊ฐ€ ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ƒ๋Œ€๊ฐ€ ๋๋‚ฌ๋‹ค๊ณ  ๋ง๋งŒ ํ•ด์ฃผ๋Š” ์‹์ด๋‹ค.

* ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ๋น„๋™๊ธฐ๋‹ค.

 

 

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

A, B์˜ ์‹œ์ž‘์ ๊ณผ ์ข…๋ฃŒ์ ์€ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค

 

์†Œ์Šค๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

a, b, c๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถœ๋ ฅ๋ ๊นŒ? ์˜ˆ์ƒํ–ˆ๋‹ค์‹œํ”ผ, ์•„๋‹ˆ๋‹ค.

* ์ฐธ๊ณ ๋กœ setTimeout์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์ž„!

a ํ•จ์ˆ˜์—์„œ setTimeout์ด ๊ฑธ๋ฆด ๋•Œ, ๋™๊ธฐ์  ๋ฐฉ์‹์ด๋ผ๋ฉด ๊ฑฐ๊ธฐ์„œ ๋Œ€๊ธฐํ•˜๊ณ  ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด b ํ•จ์ˆ˜๋กœ ๋„˜์–ด๊ฐ”๊ฒ ์ง€๋งŒ

๋น„๋™๊ธฐ์  ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค. ๋ฉˆ์ถ”์ง€ ์•Š๊ณ , ๋ฐ”๋กœ b ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ๋’ค์„ž์—ฌ ์ถœ๋ ฅ๋œ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„๋•Œ์—๋Š” callback function์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

function t1() {
  setTimeout( () => {
    console.log("task_1");
  }, 2000);
}

function t2() {
   console.log("task_2");
}

function t3() {
   console.log("task_3");
}

t1();
t2();
t3();

 

A๋Š” ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  A์ž‘์—…์„ ํ•˜๋ฉด์„œ, ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š๊ณ ๋„ ๋ถ€๋ชจํ•จ์ˆ˜์ธ run์—๊ฒŒ ๋ฐ”๋กœ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ค€๋‹ค.

์ œ์–ด๊ถŒ์„ ๋ฐ›์€ ๋ถ€๋ชจํ•จ์ˆ˜๋Š” ์ฐจ๋ก€๋กœ B์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ , A์ž‘์—…์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๊ฐ’์€ ๋‹ค๋ฅธ ์‹œ์ ์— ๋ฐ˜ํ™˜๋˜์–ด์ง„๋‹ค.

 


๋ธ”๋กœํ‚น(Blocking)

 ์ฃผ์ฒด๋Š” ํ•˜๋‚˜. ๊ทธ ํ•˜๋‚˜์˜ ์ฃผ์ฒด์™€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ฃผ์ฒด์— ๋Œ€ํ•œ ๊ฐœ๋….

๋ธ”๋กœํ‚น์€ ์ฃผ์ฒด๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์„ ํ•˜๋‹ค๊ฐ€ ํƒ€ ์ฃผ์ฒด์˜ ์ž‘์—…์˜ ์‹œ์ž‘~๋์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€, ๊ทธ ๋’ค์— ๋‹ค์‹œ ์ž์‹ ์˜ ์ž‘์—…์„ ์ด์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ํ•จ์ˆ˜ A๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์ฒด์ธ ํ•จ์ˆ˜ B๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋Š”๋ฐ, ํ•จ์ˆ˜ B์˜ ์‹œ์ž‘~๋์„ ๊ธฐ๋‹ค๋ฆฐ ๋’ค, B์— ๋Œ€ํ•œ return๊ฐ’์„ ๋ฐ›์•„์˜จ ํ›„์— ์ž์‹ ์˜ ์ž‘์—…์„ ์ด์–ด๊ฐ„๋‹ค๋ฉด, ์ด๊ฒƒ์ด ๋ธ”๋กœํ‚น์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

 

A๋Š” ์‹คํ–‰ ๋„์ค‘, B๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด B๊ฐ€ ๋๋‚˜๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€, ๋๋‚˜๋ฉด ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค.

 

Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, A๋Š” ์ œ์–ด๊ถŒ์„ B์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  Bํ•จ์ˆ˜๋Š” ์ž‘์—…์ด ๋๋‚˜๋ฉด A์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋’ค A๋Š” ๋‹ค์‹œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 


๋…ผ๋ธ”๋กœํ‚น(non-Blocking)

 ์ฃผ์ฒด๋Š” ํ•˜๋‚˜. ๊ทธ ํ•˜๋‚˜์˜ ์ฃผ์ฒด์™€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ฃผ์ฒด์— ๋Œ€ํ•œ ๊ฐœ๋….

๋…ผ๋ธ”๋กœํ‚น์€ ์ฃผ์ฒด๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์„ ํ•˜๋‹ค๊ฐ€ ํƒ€ ์ฃผ์ฒด์˜ ์ž‘์—…์˜ ์‹œ์ž‘~๋์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์š”์ฒญ๋งŒ์„ ํ•œ ๋’ค, ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์ž‘์—…์„ ์ด์–ด๊ฐ„๋‹ค. ํ•จ์ˆ˜ A๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์ฒด์ธ ํ•จ์ˆ˜ B๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋Š”๋ฐ, ํ•จ์ˆ˜ B์˜ ์‹œ์ž‘~๋์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  A์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ด์–ด๊ฐ€๋‹ค๊ฐ€ B์— ๋Œ€ํ•œ return๊ฐ’์„ ๋ฐ›๋Š”๋‹ค๋ฉด ๋…ผ๋ธ”๋กœํ‚น์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

A๋Š” B์—๊ฒŒ ์š”์ฒญ๋งŒ ํ•˜๊ณ , ์ž์‹ ์˜ ํ•  ์ผ์„ ์ด์–ด๊ฐ„๋‹ค

๋…ผ๋ธ”๋กœํ‚น๋„ ๋ธ”๋กœํ‚น๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํ˜ธ์ถœ ํ•  ๋•Œ์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ฐ”๋กœ ๋Œ๋ ค๋ฐ›๋Š”๋‹ค.

A๋Š” B์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ์ž๋งˆ์ž ๋Œ๋ ค๋ฐ›๋Š”๋‹ค. ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค๋ฐ›์€ A๋Š” ์ด์–ด์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

 


์ •๋ฆฌ

๋™๊ธฐ/๋น„๋™๊ธฐ

- ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€๋ฅผ ๋ˆ„๊ฐ€ ์ฒดํฌํ•˜๋Š”๊ฐ€?
๋™๊ธฐ : ์š”์ฒญ์ž๊ฐ€  ์š”์ฒญํ•œ ํ•จ์ˆ˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ๊ณ„์† ํ™•์ธ. ํ•จ์ˆ˜๋“ค์ด ์‹œ๊ฐ„์„ ๋งž์ถฐ ์‹คํ–‰๋˜์–ด์ง„๋‹ค. ์š”์ฒญ์ž๋Š” ์š”์ฒญํ•œ ํ•จ์ˆ˜์™€ ์‹œ์ž‘๊ณผ ๋์„ ๊ฐ™์ด ํ•˜๊ฑฐ๋‚˜, ์š”์ฒญํ•œ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด ์‹œ์ž‘๋œ๋‹ค.
๋น„๋™๊ธฐ : ์š”์ฒญ์ž๋Š” ์š”์ฒญ๋งŒ ํ•œ ๋’ค, ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์š”์ฒญ ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ์•Œ๋ ค์ค€๋‹ค. 

 

๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น

- ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ œ์–ด๊ถŒ(ํ•จ์ˆ˜์‹คํ–‰๊ถŒ๋ฆฌ)์„ ์–ธ์ œ ๋„˜๊ฒจ์ฃผ๋А๋ƒ?
๋ธ”๋กœํ‚น : ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ๋‚˜๋ฉด, ์š”์ฒญ์ž์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๊ณ , ์š”์ฒญ์ž๋Š” ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค๋ฐ›์„๋•Œ๊นŒ์ง€ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
๋…ผ๋ธ”๋กœํ‚น : ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์š”์ฒญ์ž์—๊ฒŒ ๋ฐ”๋กœ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ค€๋‹ค. ์š”์ฒญ์ž๋Š” ์š”์ฒญ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‹ค์Œ์—๋Š” ๋™๊ธฐ/๋น„๋™๊ธฐ+๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น์˜ ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ! 

 

 

References

https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9