Blocking vs Non-Blocking Synchronous vs Asynchronous

hyyyynjnΒ·2021λ…„ 6μ›” 24일
0
post-thumbnail

βœ…Blocking vs Non-Blocking

πŸ‘‰ λ‹€λ₯Έ 주체가 μž‘μ—…ν•  λ•Œ "μžμ‹ μ˜ μ œμ–΄κΆŒ"이 μžˆλŠ”μ§€ μ—†λŠ”μ§€λ‘œ κ΅¬λΆ„ν•œλ‹€.
πŸ‘‰ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ λ°”λ‘œ λ¦¬ν„΄ν•˜λŠλƒ λ§ˆλŠλƒλ‘œ κ΅¬λΆ„ν•œλ‹€.

✍Blocking
μžμ‹ μ˜ μž‘μ—…μ„ μ§„ν–‰ν•˜λ‹€κ°€ λ‹€λ₯Έ 주체의 μž‘μ—…μ΄ μ‹œμž‘λ˜λ©΄ λ‹€λ₯Έ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ μžμ‹ μ˜ μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” 것

  • 호좜된 ν•¨μˆ˜κ°€ μžμ‹ μ˜ μž‘μ—…μ„ λͺ¨λ‘ 마칠 λ•ŒκΉŒμ§€ ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ μ œμ–΄κΆŒμ„ λ„˜κ²¨μ£Όμ§€ μ•Šκ³  λŒ€κΈ°ν•˜κ²Œ λ§Œλ“ λ‹€
  • ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ λ°”λ‘œ λ¦¬ν„΄ν•˜μ§€ μ•ŠμœΌλ©΄ Blocking

πŸ“Œ μ˜ˆμ‹œ

사원Blocking 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Blocking μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ μ½λŠ” λ™μ•ˆ μ‚¬μ›μ—κ²Œ 기닀리라고 ν•œλ‹€
상사가 μ„œλ₯˜λ₯Ό λ‹€ 읽고 κ²°κ³Όλ₯Ό μ£Όλ©΄ κ·Έμ œμ„œμ•Ό 제자리둜 갈 수 μžˆλ‹€

✍Non-Blocking
λ‹€λ₯Έ 주체의 μž‘μ—…μ— 관련없이 μžμ‹ μ˜ μž‘μ—…μ„ ν•˜λŠ” 것

  • 호좜된 ν•¨μˆ˜κ°€ λ°”λ‘œ returnν•΄μ„œ ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ μ œμ–΄κΆŒμ„ λ„˜κ²¨μ£Όκ³  ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ λ‹€λ₯Έ 일을 ν•  수 μžˆλŠ” 기회λ₯Ό μ€€λ‹€
  • ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ λ°”λ‘œ λ¦¬ν„΄ν•˜λ©΄ Non-Blocking

πŸ“Œ μ˜ˆμ‹œ

사원Non-Blocking 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Non-Blocking μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό μ½μ–΄λ³Όν…Œλ‹ˆ μ‚¬μ›μ—κ²Œ 자리둜 λŒμ•„κ°€λΌκ³  ν•œλ‹€
사원은 자리둜 λŒμ•„μ™€ μžμ‹ μ˜ 일을 ν•œλ‹€μ‚¬μ›μ΄ 일을 ν•˜λŠ” λ™μ•ˆ μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό μ½λŠ”λ‹€

βœ…Synchronous vs Asynchronous

πŸ‘‰ κ²°κ³Όλ₯Ό λŒλ €μ£Όμ—ˆμ„ λ•Œ "μˆœμ„œμ™€ κ²°κ³Ό(처리)에 관심"이 μžˆλŠ”μ§€ μ•„λ‹Œμ§€λ‘œ κ΅¬λΆ„ν•œλ‹€.
πŸ‘‰ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ‘œ κ΅¬λΆ„ν•œλ‹€.

✍Synchronous
μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘ν•¨μ„ μ˜λ―Έν•œλ‹€.

  • ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ μž‘μ—… μ™„λ£Œ ν›„ return을 κΈ°λ‹€λ¦¬κ±°λ‚˜, ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ‘œλΆ€ν„° λ°”λ‘œ return 받더라도 μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ₯Ό ν˜ΈμΆœν•œ ν•¨μˆ˜ 슀슀둜 ν™•μΈν•˜λ©° μ‹ κ²½ μ“΄λ‹€
  • ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ μž‘μ—… μ™„λ£Œλ₯Ό ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μ‹ κ²½μ“°λ©΄ Synchronous

πŸ“Œ μ˜ˆμ‹œ

사원Synchronous 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Synchronous μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ μ½λŠ” λ™μ•ˆ 사원이 κΈ°λ‹€λ¦¬λ˜μ§€, λ‹€λ₯Έ 일을 ν•˜λ˜μ§€ 신경쓰지 μ•ŠλŠ”λ‹€
상사가 μ„œλ₯˜λ₯Ό λ‹€ 읽고 κ²°κ³Όλ₯Ό μ£Όλ©΄ λ°”λ‘œ μ²˜λ¦¬ν•œλ‹€

✍Asynchronous
μž‘μ—…μ˜ μ‹œμž‘κ³Ό μ’…λ£Œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©°, λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘ ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•œλ‹€.

  • ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ—κ²Œ callback을 μ „λ‹¬ν•΄μ„œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ 전달받은 callback을 μ‹€ν–‰ν•˜κ³ , ν˜ΈμΆœν•œ ν•¨μˆ˜λŠ” μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ₯Ό 신경쓰지 μ•ŠλŠ”λ‹€
  • μž‘μ—… μ™„λ£Œ ν›„ 받은 결과에 λŒ€ν•΄ μ²˜λ¦¬ν•  μˆ˜λ„ 있고, μ•ˆ ν•  μˆ˜λ„ μžˆλ‹€
  • ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ μž‘μ—… μ™„λ£Œλ₯Ό 호좜된 ν•¨μˆ˜κ°€ μ‹ κ²½μ“°λ©΄ Asynchronous

πŸ“Œ μ˜ˆμ‹œ

사원Asynchronous 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€.Asynchronous μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ μ½λŠ” λ™μ•ˆ 사원이 κΈ°λ‹€λ¦¬λ˜μ§€, λ‹€λ₯Έ 일을 ν•˜λ˜μ§€ 신경쓰지 μ•ŠλŠ”λ‹€. μ„œλ₯˜λ₯Ό λ‹€ 읽은 ν›„ κ²°κ³Όλ₯Ό λ‚˜μ€‘μ— ν™•μΈν•˜λΌκ³  λ©”μΌλ‘œ 보내쀀닀.
사원은 λ‚˜μ€‘μ— 메일을 ν™•μΈν•˜κ³  μ–Έμ  κ°€ μ²˜λ¦¬ν•œλ‹€.

βœ…4가지 μ‘°ν•©

πŸ‘Blocking/Sync

Blocking πŸ‘‰ λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘ν•˜κ²Œλ˜λ©΄, μ›λž˜μ˜ μž‘μ—…μ„ λ©ˆμΆ˜λ‹€
Sync πŸ‘‰ κ²°κ³Όλ₯Ό λ°˜ν™˜λ°›μœΌλ©΄, λ°”λ‘œ μ²˜λ¦¬ν•œλ‹€

πŸ“Œ μ˜ˆμ‹œ

사원Blocking/Sync 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Blocking/Sync μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ μ½λŠ” λ™μ•ˆ 기닀리라고 ν•œλ‹€(blocking).
상사가 μ„œλ₯˜λ₯Ό λ‹€ 읽고 κ²°κ³Όλ₯Ό μ£Όλ©΄ λ°”λ‘œ μ²˜λ¦¬ν•œλ‹€(sync)

πŸ“Œ 적용

μžλ°”μ—μ„œ μž…λ ₯μš”μ²­μ‹œ μ œμ–΄κΆŒμ΄ μž…λ ₯으둜 λ„˜μ–΄κ°„λ‹€. κ·Έλž˜μ„œ μž…λ ₯을 λ°›κΈ° μ „κΉŒμ§€ λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•Šκ³ , μž…λ ₯을 λ°›μœΌλ©΄ μ œμ–΄κΆŒκ³Ό ν•¨κ»˜ κ²°κ³Όλ₯Ό 같이 λ°›μ•„ μ²˜λ¦¬ν•œλ‹€.

πŸ‘Non-Blocking/Sync

Non-Blocking πŸ‘‰ λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘ν•˜κ²Œλ˜μ–΄λ„, μ›λž˜μ˜ μž‘μ—…μ— λŒ€ν•œ μ œμ–΄κΆŒμ„ 가지고 μ§„ν–‰ν•œλ‹€
Sync πŸ‘‰ κ²°κ³Όλ₯Ό λ°˜ν™˜λ°›μœΌλ©΄, λ°”λ‘œ μ²˜λ¦¬ν•œλ‹€

πŸ“Œ μ˜ˆμ‹œ

사원Non-Blocking/Sync 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Non-Blocking/Sync μƒμ‚¬λŠ” μ‚¬μ›μ—κ²Œ 자리둜 λŒμ•„κ°€λΌκ³  ν•œλ‹€(non-blocking).
사원은 μƒμ‚¬μ—κ²Œ κ²°κ³Όκ°€ λ‚˜μ™”λŠ”μ§€ λ¬Όμ–΄λ³Έλ‹€μƒμ‚¬λŠ” 아직이라고 λŒ€λ‹΅ν•œλ‹€
사원은 μƒμ‚¬μ—κ²Œ κ²°κ³Όκ°€ λ‚˜μ™”λŠ”μ§€ 또 λ¬Όμ–΄λ³Έλ‹€μƒμ‚¬λŠ” κ²°κ³Όκ°€ λ‚˜μ™”μ„λ•Œ μ‚¬μ›μ—κ²Œ μ „λ‹¬ν•œλ‹€
사원은 κ²°κ³Όλ₯Ό λ°›κ³ λ‚˜μ„œ λ°”λ‘œ μ²˜λ¦¬ν•œλ‹€(sync)

πŸ“Œ 적용

κ²Œμž„μ—μ„œ 맡 데이터λ₯Ό κ°€μ Έμ˜¬ λ•Œ, μœ μ €μ—κ²Œ 정보 λ‘œλ“œμœ¨μ„ λ³΄μ—¬μ£ΌλŠ” 경우. (progress bar)

πŸ‘Blocking/Async

Blocking πŸ‘‰ λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘ν•˜κ²Œλ˜λ©΄, μ›λž˜μ˜ μž‘μ—…μ„ λ©ˆμΆ˜λ‹€
Async πŸ‘‰ κ²°κ³Όλ₯Ό λ°˜ν™˜λ°›μ•„λ„, λ°”λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
보톡 개발자의 μ‹€μˆ˜λ‘œ Non-Blocking/Async ν˜•μ‹μœΌλ‘œ λ™μž‘ν•˜λ €λ˜ μž‘μ—…μ΄ μ˜λ„ν•˜μ§€ μ•Šκ²Œ Blocking/Async 으둜 λ™μž‘ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. NonBlocking/Async 방식을 μ“°λŠ”λ° κ·Έ κ³Όμ • 쀑에 ν•˜λ‚˜λΌλ„ Blocking으둜 λ™μž‘ν•˜λŠ” μž‘μ—…μ΄ ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄ μ˜λ„ν•˜μ§€ μ•Šκ²Œ Blocking/Async둜 λ™μž‘ν•  수 μžˆλ‹€.

πŸ“Œ μ˜ˆμ‹œ

사원Blocking/Async 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Blocking/Async μƒμ‚¬λŠ” μ‚¬μ›μ—κ²Œ 기닀리라고 ν•œλ‹€(blocking).
사원은 결과에 큰 관심이 μ—†μ§€λ§Œ κΈ°λ‹€λ¦°λ‹€μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ 읽고 κ²°κ³Όλ₯Ό λ©”μΌλ‘œ μ „λ‹¬ν•œλ‹€
사원은 λ‚˜μ€‘μ— 메일을 읽고 결과에 λŒ€ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€

πŸ‘Non-Blocking/AsyncπŸ‘

Non-Blocking πŸ‘‰ λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘ν•˜κ²Œλ˜μ–΄λ„, μ›λž˜μ˜ μž‘μ—…μ— λŒ€ν•œ μ œμ–΄κΆŒμ„ 가지고 μ§„ν–‰ν•œλ‹€
Async πŸ‘‰ κ²°κ³Όλ₯Ό λ°˜ν™˜λ°›μ•„λ„, λ°”λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
μ„±λŠ₯κ³Ό μžμ›μ˜ 효율적 μ‚¬μš© κ΄€μ μ—μ„œ κ°€μž₯ μœ λ¦¬ν•œ λͺ¨λΈμ€ Non-Blocking/Async λͺ¨λΈμ΄λ‹€.

πŸ“Œ μ˜ˆμ‹œ

사원Non-Blocking/Async 상사
사원은 μ„œλ₯˜λ₯Ό μž‘μ„±ν•˜μ—¬ μƒμ‚¬μ—κ²Œ λ³΄κ³ ν•œλ‹€Non-Blocking/Async μƒμ‚¬λŠ” μ‚¬μ›μ—κ²Œ μ„œλ₯˜λ₯Ό μ½μ–΄λ³Όν…Œλ‹ˆ μ‚¬μ›μ—κ²Œ 자리둜 λŒμ•„κ°€λΌκ³  ν•œλ‹€(non-blocking)
μƒμ‚¬λŠ” μ„œλ₯˜λ₯Ό λ‹€ 읽고 κ²°κ³Όλ₯Ό λ©”μΌλ‘œ μ „λ‹¬ν•œλ‹€
사원은 λ‚˜μ€‘μ— 메일을 읽고 결과에 λŒ€ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€

πŸ“Œ 적용

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ API μš”μ²­μ„ ν•œλ’€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ‹€κ°€ callback ν•¨μˆ˜λ₯Ό 톡해 좔가적 μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λœλ‹€.

0개의 λŒ“κΈ€