Synchronous/Asynchronous

Asynchronous

ํ”„๋กœ๊ทธ๋ž˜๋ฐ(programming) ๊ด€์ ์—์„œ์˜ asynchronous(๋น„๋™๊ธฐ)

synchronous(๋™๊ธฐ์‹)

  • ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ํ•จ

  • ์—ฌ๋Ÿฌ ์ž‘์—…(task)๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐœ๋ฐœํ•จ

  • ์˜ˆ)

    • ์Œ์‹ ์ค€๋น„ํ•˜๊ธฐ : ๊ตญ ๋“์ด๊ณ  ๋‹ค ๋“์ด๋ฉด, ํ–‡๋ฐ˜ ๋ฐ์šฐ๊ณ  ๋‹ค ๋ฐ์›Œ์ง€๋ฉด, ์ŠคํŒธ ๊ตฝ๊ธฐ

    • 42 ์›น์„œ๋ธŒ : ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„๊ฐ€ ๊ทธ ์ผ๋งŒ ํ•จ

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

  • ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ํ•„์š” ์—†์ด ๋™์‹œ์— ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ

  • ์—ฌ๋Ÿฌ ์ž‘์—…๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐœ๋ฐœํ•จ

  • ์˜ˆ)

    • ์Œ์‹ ์ค€๋น„ํ•˜๊ธฐ : ๊ตญ ๋“์ด๋Š” ๋™์•ˆ์—, ํ–‡๋ฐ˜์„ ์ „์ž๋ ˆ์ธ์ง€ ๋ฐ์šฐ๊ณ , ๋ฐ์›Œ์ง€๋Š” ๋™์•ˆ์— ์ŠคํŒธ ๊ตฝ๊ธฐ

    • 42 ์›น์„œ๋ธŒ : ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ์™”์„ ๋•Œ, ๋‹ค์Œ I/O ๋ฐœ์ƒ ์ „๊นŒ์ง€๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋‹ค๋ฅธ ์š”์ฒญ์˜ I/O ์ด๋ฒคํŠธ ๋ฐœ์ƒ๊ฑด์„ ์ฒ˜๋ฆฌํ•จ. ํ•˜๋‚˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ์š”์ฒญ๊ณผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•จ

Synchronous vs Asynchronous

syncs_vs_async

์ฃผ์˜ํ•  ์ 

  • asynchronous programming != multithreading

    • asynchronous programming : ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•๋ก 

    • multi-threading : asynchronous programming์˜ ํ•œ ์ข…๋ฅ˜

asynchronous programming ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • multi-threads : ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ , ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ๊ณผ race condition ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ 

  • non-block I/O : CPU ์ž‘์—…๊ณผ I/O ์ž‘์—…์€ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด๊ธฐ์—, ๊ทธ ์ž‘์—…์„ ๋™์‹œ์— ํ•จ

    • I/O device๋Š” CPU์—ญํ• ์„ ํ•˜๋Š” device controler๊ฐ€ ์žˆ์Œ. device controler๊ฐ€ ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ I/Oํ•˜๊ณ  ์žˆ์„ ๋•Œ, ์ปดํ“จํ„ฐ์˜ CPU๋Š” ๋‹ค๋ฅธ ์ผ ํ•  ์ˆ˜ ์žˆ์Œ (์ง„์งœ๋กœ ๋™์‹œ์— ํ•จ)

I/O๊ด€์ ์—์„œ ๋น„๋™๊ธฐ

๋ฌธ๋งฅ์— ๋”ฐ๋ฅธ case 1

  • synchronous I/O = block I/O

  • asynchronous I/O = non-block I/O

๋ฌธ๋งฅ์— ๋”ฐ๋ฅธ case 2

  • synchronous I/O : ์š”์ฒญ์ž๊ฐ€ I/O ์™„๋ฃŒ๊นŒ์ง€ ์ฑ™๊ฒจ์•ผ ํ•  ๋•Œ

  • asynchronous I/O : ์ž‘์—…์ž๊ฐ€ OS๋กœ๋ถ€ํ„ฐ ์ž‘์—… ์™„๋ฃŒ์— ๋Œ€ํ•ด noti๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ callback์„ ์ „๋‹ฌํ•ด์„œ ์ž‘์—…์ด ๋๋‚  ๋•Œ OS๊ฐ€ ์•Œ์•„์„œ callback์„ ์‹คํ–‰

๋ฌธ๋งฅ์— ๋”ฐ๋ฅธ case 3

  • asynchronous I/O : block I/O๋ฅผ ๋‹ค๋ฅธ thread์—์„œ ์‹คํ–‰ํ•จ

    • ASP.NET์—์„œ async๋กœ thread pool ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ด ๊ฒฝ์šฐ์ผ ๋“ฏ

๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ๊ด€์  (a)synchronous communication

  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ๊ธฐ๋Šฅ๊ณผ ์—ญํ• ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋˜๊ณ , ์ด๋“ค ์‚ฌ์ด์—์„œ๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋ฐœ์ƒํ•จ

synchronous

  • ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•  ๋•Œ, ํ•œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šคํ•œํ…Œ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๋ฉด, ๊ทธ ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ž‘์—…์„ ๊ณ„์†ํ•จ

  • ํŠน์ • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—๊ฒŒ๋„ ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋จ

asynchronous

  • Message Queue๋ฅผ ํ™œ์šฉํ•จ

  • ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์œผ๋ฉด message queue์— ๋„ฃ๊ณ  ์ž๊ธฐํ• ์ผ ํ•จ

  • ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ž‘ ๊ณต์œ ํ•˜๋Š” message queue๋ฅผ ๊ณ„์†ํ•ด์„œ ์‚ดํŽด๋ณด๊ณ , ์žˆ์œผ๋ฉด ์ฒ˜๋ฆฌํ•จ

  • ํŠน์ • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—๊ฒŒ๋„ ์žฅ์• ์— ํŒŒ๊ธ‰๋ ฅ์ด ์•ฝํ•จ

์ฐธ๊ณ  ๋ฐ ๊ทธ๋ฆผ ์ถœ์ฒ˜

Last updated