Study: ComputerScience(CS)/CS: Network

[Network] Blocking vs Non-Blocking & Sync vs Async 비ꡐ 정리

DrawingProcess 2022. 9. 25. 09:30
λ°˜μ‘ν˜•
πŸ’‘ λ³Έ λ¬Έμ„œλŠ” 'Blocking vs Non-Blocking'κ³Ό 'Sync vs Async'에 λŒ€ν•΄ 정리해놓은 κΈ€μž…λ‹ˆλ‹€.
network외에도 이 κ°œλ…μ€ μ‚¬μš©ν•  λ•Œλ„ μžˆμœΌλ‚˜, 이 λ¬Έμ„œμ˜ 경우 λ„€νŠΈμ›Œν¬ μƒμ—μ„œ λ§ν•˜λŠ” κ°œλ…μœΌλ‘œ μ„€λͺ…ν•˜κ³  μžˆμœΌλ‹ˆ μ°Έκ³ λ°”λžλ‹ˆλ‹€.

 

Blocking vs Non-Blocking I/O

λ‹€λ₯Έ 주체가 μž‘μ—…ν•  λ•Œ μžμ‹ μ˜ μ œμ–΄κΆŒμ΄ μžˆλŠ”μ§€ μ—†λŠ”μ§€λ‘œ νŒλ‹¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • Blocking I/O
    • System Call이 λλ‚ λ•ŒκΉŒμ§€ ν”„λ‘œκ·Έλž¨μ€ λŒ€κΈ°ν•΄μ•Ό ν•˜κ³  System Call이 μ™„λ£Œκ°€ 되면 κ·Έλ•Œμ•Ό Return ν•©λ‹ˆλ‹€. 
    • λ‹€μ‹œ λ§ν•˜λ©΄, μžμ‹ μ˜ μž‘μ—…μ„ μ§„ν–‰ν•˜λ‹€κ°€ λ‹€λ₯Έ 주체의 μž‘μ—…μ΄ μ‹œμž‘λ˜λ©΄ λ‹€λ₯Έ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ μžμ‹ μ˜ μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
    • μ΄λŠ” μ œμ–΄κΆŒμ΄ λ‹€λ₯Έ μž‘μ—…μ— μžˆλ‹€κ³  ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Non-Blocking I/O:
    • System Call이 μ™„λ£Œλ˜μ§€ μ•Šμ•„도 λŒ€κΈ°ν•˜μ§€ μ•Šκ³  Return ν•΄λ²„λ¦°λ‹€.
    • λ‹€μ‹œ λ§ν•˜μžλ©΄, λ‹€λ₯Έ 주체의 μž‘μ—…μ— 관련없이 μžμ‹ μ˜ μž‘μ—…μ„ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
    • μ΄λŠ” μ œμ–΄κΆŒμ΄ μžμ‹ μ˜ μž‘μ—…μ— μžˆλ‹€κ³  ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Sync vs Async

κ²°κ³Όλ₯Ό λŒλ €μ£Όμ—ˆμ„ λ•Œ μˆœμ„œμ™€ 결과에 관심을 가지고 νŒλ‹¨ν•©λ‹ˆλ‹€.

  • Sync (Synchronous)
    • System Call이 λλ‚ λ•ŒκΉŒμ§€ 기닀리고 결과물을 κ°€μ Έμ˜¨λ‹€.
    • μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘ν•¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • Async (Asynchronous)
    •  System Call이 μ™„λ£Œλ˜μ§€ μ•Šμ•„λ„ λ‚˜μ€‘μ— μ™„λ£Œκ°€ 되면 κ·Έλ•Œ 결과물을 κ°€μ Έμ˜¨λ‹€.
    • μ‹œμž‘, μ’…λ£Œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©°, μž‘μ—…μ΄ λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘μ„ ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

 

μ‘°ν•©: Blocking vs Non-Blocking & Sync vs Async

  Blocking I/O Non-Blocking I/O
Sync Blocking / Sync Non-Blocking / Sync
Async Blocking / Async Non-Blocking / Async

Blocking / Sync

(Blocking)λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘λ˜λŠ” λ™μ•ˆ λ™μž‘μ„ ν•˜μ§€ μ•ŠμœΌλ©°, (Sync)κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ©΄ λ°”λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

Non-Blocking / Sync

(Non-Blocking)λ‹€λ₯Έ μž‘μ—…μ΄ μžˆμ–΄λ„ μžμ‹ μ˜ μž‘μ—…μ„ λ©ˆμΆ”μ§€ μ•ŠμœΌλ©°, (Sync)κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ©΄ λ°”λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ΄λ•Œ 주기적으둜 κ²°κ³Όλ₯Ό 물어보고 λ°˜ν™˜ν•˜λŠ” 과정을 톡해 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  경우 ν•΄λ‹Ή κ²°κ³Όλ₯Ό λ°”λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

Blocking / Async

(Blocking)λ‹€λ₯Έ μž‘μ—…μ΄ μ‹œμž‘λ˜λŠ” λ™μ•ˆ λ™μž‘μ„ ν•˜μ§€ μ•ŠμœΌλ©°, (Async)κ²°κ³Όλ₯Ό λ°”λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이와 같이 μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” 맀우 λ“œλ­…λ‹ˆλ‹€(잘 λͺ» κ΅¬ν˜„ν–ˆλ‹€κ³  ν‘œν˜„ν•˜λŠ”κ²Œ λ§žμ„μˆ˜λ„ μžˆκ² λ„€μš”). λ”°λΌμ„œ Blocking의 경우 λŒ€λΆ€λΆ„ Sync둜 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

Non-Blocking / Async

(Non-Blocking)λ‹€λ₯Έ μž‘μ—…μ΄ μžˆμ–΄λ„ μžμ‹ μ˜ μž‘μ—…μ„ λ©ˆμΆ”μ§€ μ•ŠμœΌλ©°, (Async)κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ©΄ λ°”λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. λ”°λΌμ„œ μžμ‹ μ˜ 일이 λλ‚˜λ©΄ 이후에 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

차이점 비ꡐ

Non-Blocking Vs ASynchronous 차이점: System Call이 μ¦‰μ‹œ Return될 λ•Œ λ°μ΄ν„°μ˜ 포함 유무

  • Asynchronous은 μš”청에 처리 μ™„λ£Œμ™€ 관계없이 μ‘λ‹΅ν•©λ‹ˆλ‹€. 이후 μš΄μ˜μ²΄μ œμ—μ„œ 응닡할 μ€€λΉ„κ°€ 되면 μ‘λ‹΅ν•©λ‹ˆλ‹€.
  • Non-Blocking은 μš”청에 μ²˜λ¦¬ν•  수 있으면 λ°”λ‘œ μ‘λ‹΅ν•˜κ³  μ•„λ‹ˆλ©΄ Errorλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

Blocking Vs Synchronous 차이점: Wait Queue 유무

  • Blocking은 System Call의 Return을 κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ ν•„μˆ˜λ‘œ Wait Queue에 λ¨Έλ­…λ‹ˆλ‹€.
  • Synchronous은 System Call의 Return을 κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ Wait Queue에 λ¨Έλ¬Ό μˆ˜λ„ 아닐 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

마무리

Blocking I/O의 경우,

  • Sync: Blocking으둜 κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Async: μ‚¬μš©ν•˜μ§€ μ•ŠμŒ.

Non-Blocking I/O의 경우, 

  • Sync: Non-Blocking 쀑 κ²°κ³Όλ₯Ό λ°›μ•˜μ„ λ•Œ, λ°”λ‘œ μ²˜λ¦¬ν•˜λŠ” 경우 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Async: Non-Blocking 쀑 κ²°κ³Όλ₯Ό λ°›μ•˜μ„ λ•Œ, μžμ‹ μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•œ ν›„ κ²°κ³Όλ₯Ό μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

μ°Έκ³ 

λ°˜μ‘ν˜•