TIL-090 | Blocking/Non-blocking & Synchronous/ Asynchronous

Lee, Chankyuยท2022๋…„ 3์›” 10์ผ
0

Computer Science

๋ชฉ๋ก ๋ณด๊ธฐ
12/12
post-thumbnail

๐ŸŒˆ Blocking/Non-blocking & Synchronous & Asynchronous

๐Ÿง ์ด์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, Node.js๋ฅผ ๊ณต๋ถ€ํ–ˆ์„๋•Œ๋„ ๊ทธ๋ ‡๊ณ  ๋น„๋™๊ธฐ ๊ฐœ๋…์€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ง„๋‹ค. ๋น„๋™๊ธฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ด์ œ ์–ด๋Š์ •๋„ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ ์žˆ์ง€๋งŒ Blocking๊ณผ Synchronous, Non-blocking๊ณผ Asynchronous์˜ ๊ฐœ๋…์ด ํ˜ผ๋™๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.


Blocking vs Non-blocking

  • Blocking๊ณผ Non-blocking์€ '์ œ์–ด๊ถŒ'์˜ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

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

  • ๋ฐ˜๋Œ€๋กœ Non-Blocking์€, ์ œ์–ด๊ถŒ์ด ๋„˜๊ฒจ ์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋Œ€์ƒ์˜ ์ž‘์—… ์ฒ˜๋ฆฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์ด ์—†์ด ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ ์ธก์—์„œ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹ค์‹œ๋งํ•ด Non-Blocking ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€, ์ œ์–ด๊ถŒ์€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ ์ธก์—์„œ ๊ณ„์†ํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŒ์•ฝ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋ฉด ๊ทธ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ธ์ง€ ์ฒดํฌํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค.

Synchronous vs Asynchronous

  • Synchronous, Asynchronous๋Š” '์‹œ๊ฐ„'์˜ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์™€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ ๋‘ ํ•จ์ˆ˜ ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณด๋ฉด, Synchronous ๋Š” ๋‘ ํ•จ์ˆ˜์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ„์— ๋Œ€ํ•ด ๋งž์ถฐ์ ธ์•ผํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์Šคํƒ์—์„œ ํ•จ์ˆ˜ ํ•˜๋‚˜๊ฐ€ ๋น ์ ธ ๋‚˜๊ฐ€๊ณ , ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋˜๊ณ , ์ด๋Ÿฐ ๋Š๋‚Œ์œผ๋กœ ์‹œ๊ฐ„์ด ์ง€์ผœ์ง€๋ฉด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ ํ•œ๊ตญ์–ด๋กœ ๋™๊ธฐํ™” ๋˜ํ•œ ๊ทธ๋Ÿฐ ๋งฅ๋ฝ์—์„œ ๋“ค์–ด๋งž๋Š”๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • Asynchronous๋Š” ๋‘ ํ•จ์ˆ˜์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ์™„์ „ํžˆ ๋งž์ถฐ์ง€์ง€๊ฐ€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€๋งŒ, ์ œ์–ด๊ถŒ์ด ์–ด๋–ป๊ฒŒ ๋ ์ง€๋Š” ๊ด€์‹ฌ์ด ์—†๋‹ค. ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋œ๋‹ค๋Š” ๋ฐ์— ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๊ฐ’์— ๋Œ€ํ•ด ๋ชจ๋“  ์ˆœ์„œ๊ฐ€ ์™„์ „ํžˆ ๋ณด์žฅ์ด ๋  ์ˆœ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. Ajax ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ๊ทธ ์˜ˆ์‹œ์ด๋‹ค.


Blocking/Non-blocking & Synchronous/Asynchronous

  • ์œ„์—์„œ ๊ฐ๊ฐ์˜ ๊ฐœ๋…๋“ค์„ ์‚ดํŽด๋ณด์•˜๋“ฏ์ด, Blocking์ด๋ผ๊ณ  ๋ฐ˜๋“œ์‹œ Sync๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Non-blocking์ด๋ผ๊ณ  ๋ฐ˜๋“œ์‹œ Async์ธ ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค.
  • ์ฆ‰ Blocking/Non-blocking๊ณผ Sync/Async๋Š” ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ด๋‹ค.


์ถœ์ฒ˜: homoefficio๋‹˜ ๋ธ”๋กœ๊ทธ

  • ๋ช‡ ๊ฐ€์ง€ ๋ชจ๋ธ์„ ์‚ดํŽด ๋ณด๋„๋ก ํ•˜์ž.

Non-blocking + Synchronous

  • ์ œ์–ด๊ถŒ์„ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๋Š”๋‹ค (Non-blocking)

  • But, ๊ฒฐ๊ณผ๊ฐ’์˜ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋œ๋‹ค (Synchronous)

  • ์ œ์–ด๊ถŒ์„ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (Non-blocking), ํ”„๋กœ๊ทธ๋žจ ์ธก์—์„œ๋Š” ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ๋‹ค๋ฅธ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.
    ํ•˜์ง€๋งŒ Synchronous์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์„ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•ด ๋งค ์‹œ๊ฐ„ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๋๋‚ฌ๋Š”์ง€ ํ…Œ์ŠคํŒ…ํ•˜๋Š” ์š”์ฒญ์ด ํ•„์š”ํ•˜๋‹ค.

Blocking + Asynchronous

  • ์ œ์–ด๊ถŒ์„ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋œ๋‹ค (Blocking)

  • But, ๊ฒฐ๊ณผ๊ฐ’์˜ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค (Asynchronous)

  • ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ์ œ์–ด๊ถŒ์„ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ฒจ์ฃผ์–ด ๋‹ค๋ฅธ ์ž‘์—…๋“ค์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ’์˜ ์‘๋‹ต์„ ๋ฐ›์€ ํ›„, ์ œ์–ด๊ถŒ ๋˜ํ•œ ๋„˜๊ฒจ๋ฐ›๊ฒŒ ๋˜์–ด ๋‹ค๋ฅธ ์ž‘์—…๋“ค์ด ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Asynchronous์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค. ์‚ฌ์‹ค ์ด๋Ÿฐ ์ผ€์ด์Šค๋Š” ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ™˜๊ฒฝ์ด ๋‹ค๋ฅธ ๋‘ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ผํ•ฉ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฒช๊ฒŒ ๋˜๋Š” ํฌ๊ท€ํ•œ ๊ฒฝ์šฐ (ex. Node.js์™€ MySQL์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)์— ์‚ฌ์šฉ๋˜์–ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค.


๐Ÿ“ Reference

  1. http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
  2. https://programming119.tistory.com/238
  3. https://jh-7.tistory.com/25
profile
Backend Developer - "Growth itself contains the germ of happiness"

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด