Block_Sync

๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ค‘์š” ์šฉ์–ด

  • ์ œ์–ด๊ถŒ

    • ์ œ์–ด๊ถŒ์€ ์ž์‹ ์˜ ์ฝ”๋“œ(ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•  ๊ถŒ๋ฆฌ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ, ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๋๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„, ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค.

  • ๊ฒฐ๊ณผ๊ฐ’์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

    • A ํ•จ์ˆ˜์—์„œ B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์„ ๊ธฐ๋‹ค๋ฆฌ๋А๋ƒ์˜ ์—ฌ๋ถ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

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

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

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

  2. ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ๋ฐ›์€ B๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. A๋Š” B์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์‹คํ–‰์„ ์ž ์‹œ ๋ฉˆ์ถ˜๋‹ค.(Block)

  3. B ํ•จ์ˆ˜๋Š” ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ž์‹ ์„ ํ˜ธ์ถœํ•œ A ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ค€๋‹ค.

  4. ์ œ์–ด๊ถŒ์„ ๋‹ค์‹œ ๋ฐ›์€ A ํ•จ์ˆ˜๋Š” ๊ทธ ๋‹ค์Œ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

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

  • ๋…ผ๋ธ”๋กœํ‚น์€ A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์ œ์–ด๊ถŒ์€ ๊ทธ๋Œ€๋กœ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

img_1.png
  1. A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, B ํ•จ์ˆ˜๋Š” ์‹คํ–‰๋˜์ง€๋งŒ, ์ œ์–ด๊ถŒ์€ A ํ•จ์ˆ˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.

  2. A ํ•จ์ˆ˜๋Š” ๊ณ„์† ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ดํ›„์—๋„ ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•œ๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ค‘์š” ์šฉ์–ด

  • ์ œ์–ด๊ถŒ

    • ์ œ์–ด๊ถŒ์€ ์ž์‹ ์˜ ์ฝ”๋“œ(ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•  ๊ถŒ๋ฆฌ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ, ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๋๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„, ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค.

  • ๊ฒฐ๊ณผ๊ฐ’์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

    • A ํ•จ์ˆ˜์—์„œ B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜์˜ ๊ฒฐ๊ด๊ฐ’์„ ๊ธฐ๋‹ค๋ฆฌ๋А๋ƒ์˜ ์—ฌ๋ถ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋™๊ธฐ(Synchronous)

  • ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‹คํ–‰์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

    • ์ฆ‰, ์š”์ฒญํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ ธ ์ˆœ์ฐจ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    • ์ˆœ์„œ์— ๋งž์ถ”์–ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

    • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์–ด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค.

    • ์˜ˆ) ์ฝœ์„ผํ„ฐ : ์ฝœ์„ผํ„ฐ๋Š” ํ•œ ์†๋‹˜์˜ ์ „ํ™” ์‘๋Œ€๊ฐ€ ๋๋‚œ ํ›„์— ๋‹ค์Œ ์†๋‹˜์˜ ์‘๋Œ€๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  • ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ํ•ด๋‹น ๋™์ž‘์˜ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ์š”์ฒญ์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹

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

    • ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

    • ์˜ˆ) ์ด๋ฉ”์ผ : ์šฐ๋ฆฌ๋Š” ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ณ  ๋‹ต๋ณ€์„ ๋ฐ›์ง€ ์•Š๊ณ ๋„ ์ด๋ฉ”์ผ์„ ๋‹ค์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

img_2.png ๋™๊ธฐ(Synchronous)๋Š” Process B๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋น„๋™๊ธฐ(Asynchronous)๋Š” Process B์˜ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋น„๋™๊ธฐ์˜ ์„ฑ๋Šฅ ์ด์ 

  • ๋น„๋™๊ธฐ๋Š” ์š”์ฒญํ•œ ์ž‘์—…์— ๋Œ€ํ•˜์—ฌ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ๊ทธ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์ด๊ฒƒ์€ I/O ์ž‘์—…๊ณผ ๊ฐ™์€ ๋А๋ฆฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•  ๋•Œ, ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

  • ์ฆ‰, ๋น„๋™๊ธฐ๋Š” ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

alt text

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋Š” ์ž‘์—… ์ˆœ์„œ ์ฒ˜๋ฆฌ ์ฐจ์ด

  • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋А๋ƒ ์•„๋‹ˆ๋ƒ์— ๋”ฐ๋ฅธ ์ฐจ์ด๋‹ค.

  • ๋™๊ธฐ ์ž‘์—…์€ ์š”์ฒญํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ง€๋Š” ๊ฒƒ์ด๊ณ , ๋น„๋™๊ธฐ ์ž‘์—…์€ ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

alt text
  • A, B, C๋ผ๋Š” 3๊ฐœ์˜ ์ž‘์—…์„ ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ์˜ ๊ทธ๋ฆผ์ด๋‹ค.

  • ๋™๊ธฐ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๊ณ , ๋น„๋™๊ธฐ๋Š” ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น์„ ์—ฎ์–ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ๊ฐ๊ฐ์„ ํ˜ผํ•ฉํ•ด์„œ ์ด ๋„ค ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

alt text
  1. ๋™๊ธฐ-๋ธ”๋กœํ‚น(Sync Blocking)

  2. ๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น(Sync Non-Blocking)

  3. ๋น„๋™๊ธฐ-๋ธ”๋กœํ‚น(Async Blocking)

  4. ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น(Async Non-Blocking)

๋™๊ธฐ-๋ธ”๋กœํ‚น(Sync Blocking)

  • Sync Blocking ์กฐํ•ฉ์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ž์‹ ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ (Blocking), ๋‹ค๋ฅธ ์ž‘์—…์˜ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋ฐ›์•„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” (Sync) ๋ฐฉ์‹์ด๋‹ค.

  • ๋‹ค๋ฅธ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒฝ์šฐ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

alt text
  • ๋™๊ธฐ-๋ธ”๋กœํ‚น ๋ฐฉ์‹์€ ์ž‘์—…๋Ÿ‰์ด ๋งŽ๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ข‹์ง€ ์•Š๋‹ค.

  • ์™œ๋ƒํ•˜๋ฉด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ์ „์ฒด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์–ด ๋น„ํšจ์œจ์ ์ด๊ฒŒ ๋œ๋‹ค.

  • ์ด ๊ฒฝ์šฐ ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น(Sync Non-Blocking)

  • Sync Non-Blocking ์กฐํ•ฉ์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ์ž์‹ ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ (Non-Blocking), ๋‹ค๋ฅธ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž‘์—…์„ ์ˆœ์ฐจ๋Œ€๋กœ ์ˆ˜ํ–‰ ํ•˜๋Š”(Sync) ๋ฐฉ์‹์ด๋‹ค.

alt text
  • A ํ•จ์ˆ˜๋Š” B ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์ค‘๊ฐ„ B ํ•จ์ˆ˜์—๊ฒŒ ํ•จ์ˆ˜ ์‹คํ–‰์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€ ๋ฌผ์–ด๋ณธ๋‹ค.

  • ์ฆ‰, ๋…ผ๋ธ”๋กœํ‚น์ธ ๋™์‹œ์— ๋™๊ธฐ์ธ ๊ฒƒ์ด๋‹ค.

// Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ์ •์˜
class MyTask implements Runnable {
    @Override
    public void run() {
        // ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰ํ•  ์ž‘์—…
        System.out.println("Hello from a thread!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Thread ๊ฐ์ฒด ์ƒ์„ฑ
        Thread thread = new Thread(new MyTask());

        // ์Šค๋ ˆ๋“œ ์‹คํ–‰
        thread.start();

        // Non-Blocking์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์ž‘์—… ๊ณ„์† ๊ฐ€๋Šฅ
        System.out.println("Main thread is running...");

        // Sync๋ฅผ ์œ„ํ•ด ์Šค๋ ˆ๋“œ์˜ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€ ํ™•์ธ
        while (thread.isAlive()) {
            System.out.println("Waiting for the thread to finish...");
        }
        System.out.println("Thread finished!");

        System.out.println("Run the next tasks");
    }
}
Main thread is running...
Waiting for the thread to finish...
Waiting for the thread to finish...
Waiting for the thread to finish...
Waiting for the thread to finish...
...(์ƒ๋žต)
Hello from a thread!
Waiting for the thread to finish...
Thread finished!
Run the next tasks

๋น„๋™๊ธฐ-๋ธ”๋กœํ‚น(Async Blocking)

  • Async Blocking ์กฐํ•ฉ์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ž์‹ ์˜ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š”(Blocking), ๋‹ค๋ฅธ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” (Async) ๋ฐฉ์‹์ด๋‹ค.

  • ๋น„๋™๊ธฐ-๋ธ”๋กœํ‚น์˜ ๊ฒฝ์šฐ ๋™๊ธฐ-๋ธ”๋กœํ‚น๊ณผ ๋น„๊ตํ•ด์„œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹ค๋ฌด์—์„œ ๋‹ค๋ฃฐ ์ผ์€ ๊ฑฐ์˜ ์—†๋‹ค.

alt text
  • A ํ•จ์ˆ˜๋Š” B ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ , ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ณด๋‚ธ๋‹ค.(๋น„๋™๊ธฐ)

  • ๊ทธ๋Ÿฐ๋ฐ B ํ•จ์ˆ˜์˜ ์ž‘์—…์— ๊ด€์‹ฌ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , A ํ•จ์ˆ˜๋Š” B ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.(๋ธ”๋กœํ‚น)

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

๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น(Async Non-Blocking)

  • Async Non-Blocking ์กฐํ•ฉ์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ์ž์‹ ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ (Non-Blocking), ๋‹ค๋ฅธ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„ ์ž‘์—… ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ง€์ง€ ์•Š๋Š” (Async) ๋ฐฉ์‹์ด๋‹ค.

  • ๋‹ค๋ฅธ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

alt text
  • A ํ•จ์ˆ˜๋Š” B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • ์ด ๋•Œ ์ œ์–ด๊ถŒ์„ B ํ•จ์ˆ˜์— ์ฃผ์ง€ ์•Š๊ณ , ์ž์‹ ์ด ๊ณ„์† ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.(๋…ผ๋ธ”๋กœํ‚น)

  • ๋”ฐ๋ผ์„œ B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ดํ›„์—๋„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  B ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ค€๋‹ค.

  • B ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด A ํ•จ์ˆ˜๊ฐ€ ์ค€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(๋น„๋™๊ธฐ)

Async Non-Blocking ์กฐํ•ฉ์€ ์ž‘์—…๋Ÿ‰์ด ๋งŽ๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์—์„œ๋Š” ๋น„๋™๊ธฐ ๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ „์ฒด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ฐธ๊ณ 

Last updated