ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

 

Blocking VS Non-Blocking

πŸ’‘ Blocking

  • μžμ‹ μ˜ μž‘μ—…μ„ μ§„ν–‰ν•˜λ‹€κ°€ λ‹€λ₯Έ 주체자의 μž‘μ—…μ΄ μ‹œμž‘λ˜λ©΄ λ‹€λ₯Έ 주체자의 μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ μžμ‹ μ˜ μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • Blocking은 μžμ‹ μ΄ ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μ™„λ£Œλ˜κΈ°κΉŒμ§€λ₯Ό κΈ°λ‹€λ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ Blocking μƒν™©μ—μ„œλŠ” μž‘μ—…μ˜ μ±…μž„μ„ λˆ„κ°€μ§€κ³  μžˆλƒμ— 관계 없이 μžμ‹ μ΄ μˆ˜ν–‰ν•˜λ˜ λ‘œμ§μ€ λ©ˆμΆ”κ²Œλ˜κ³  였맀뢈망 ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ κ²°κ³Όλ₯Ό 돌렀주기λ₯Ό κΈ°λ‹€λ¦¬κ²Œ λ©λ‹ˆλ‹€.

πŸ’‘ Non-Blocking

  • λ‹€λ₯Έ 주체자의 μž‘μ—…μ— 관련없이 μžμ‹ μ˜ μž‘μ—…μ„ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • μžμ‹ μ΄ ν˜ΈμΆœν•œ ν•¨μˆ˜μ— λŒ€ν•˜μ—¬ 기닀리지 μ•Šκ³ , μž‘μ—…λ§Œ μ „λ‹¬ν•œ ν›„ λ³΅κ·€ν•˜μ—¬ μžμ‹ μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. μš”μ²­ν•œ μž‘μ—…μ— λŒ€ν•œ κ²°κ³Όκ°€ μš”μ²­κ³Ό λ™μ‹œμ— μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€λ©΄ λ°”λ‘œ κ²°κ³Όλ₯Ό 받을 μˆ˜λ„ μžˆμ§€λ§Œ, 보톡은 κ²°κ³Όλ₯Ό 주기에 μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμ— pending μ‹ ν˜ΈλΌλ„ μ₯μ–΄μ£Όκ²Œ λ©λ‹ˆλ‹€.
  • μ€‘μš”ν•œ 것은 Blockingκ³ΌλŠ” λ‹€λ₯΄κ²Œ μžμ‹ μ΄ κ°€λ˜ 길을 λ©ˆμΆ”μ§€ μ•Šλ„λ‘ ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

πŸ’‘ Blocking / Non-Blocking 정리

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

 

Sync VS Async

πŸ’‘ Sync(동기)

  • μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘ν•¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • λ™κΈ°λŠ” μž‘μ—…μ˜ 주체성을 본인이 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • 본인이 λ‹€λ₯Έ μ£Όμ²΄μžμ—κ²Œ μž‘μ—…μ„ μš”κ΅¬(ν•¨μˆ˜ 호좜)ν•œλ‹€λ©΄ 본인은 λ‹€λ₯Έ 주체자의 ν–‰μœ„κ°€ μ™„μ „νžˆ λλ‚˜κ±°λ‚˜, λ‹€λ₯Έ μ£Όμ²΄μžκ°€ κ²°κ³Όλ₯Ό λŒλ €μ€„ λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ μžμ‹ μ΄ 남은 일을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ§₯λ½μ—μ„œλŠ” Blockingκ³Ό λΉ„μŠ·ν•œκ±° κ°™μŠ΅λ‹ˆλ‹€.
  • λ˜ν•œ 본인은 λ‹€λ₯Έ 주체자의 μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•Šμ€ μƒνƒœλΌλ©΄ λ‹€λ₯Έ μ£Όμ²΄μžμ—κ²Œ μ§€μ†μ μœΌλ‘œ λ¬Όμ–΄λ³΄λ©΄μ„œ μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 즉 λ‹€λ₯Έ μ£Όμ²΄μžκ°€ κ²°κ³Όλ₯Ό μ–Έμ œ λŒλ €μ£ΌλŠ”μ§€ 상관은 μ—†μ§€λ§Œ 본인의 μž…μž₯μ—μ„œλŠ” λ‹€λ₯Έ 주체자의 μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ₯Ό μ•„λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ’‘ Async(비동기)

  • μ‹œμž‘, μ’…λ£Œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©°, λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘μ„ ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • λΉ„λ™κΈ°λŠ” μž‘μ—…μ˜ 주체성을 λ‹€λ₯Έ μ£Όμ²΄μžκ°€ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • 비동기 μƒν™©μ—μ„œλŠ” 본인이 λ‹€λ₯Έ μ£Όμ²΄μžμ—κ²Œ μž‘μ—…μ„ μš”κ΅¬ν•˜λ©΄μ„œ κ²°κ³Όκ°€ μ™„λ£Œλ˜λ©΄ μˆ˜ν–‰ν•΄λ‹¬λΌκ³  μš”μ²­ν•˜λŠ” 콜백 ν•¨μˆ˜λ„ 같이 λ„˜κΉλ‹ˆλ‹€.
  • 본인은 λ‹€λ₯Έ μ£Όμ²΄μžμ—κ²Œ μž‘μ—…μ„ μš”μ²­ν•œ ν›„ μš”μ²­ν•œ μž‘μ—…μ— λŒ€ν•΄μ„œλŠ” 아무것도 신경쓰지 μ•Šκ³ , μžμ‹ μ΄ ν•  일을 μ΄μ–΄μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • 동기 μƒν™©μ—μ„œλŠ” ν•΄λ‹Ή μž‘μ—…μ— λŒ€ν•œ μ™„λ£Œ μ±…μž„μ€ 본인이 가지고 μžˆμ—ˆμ§€λ§Œ, 비동기 μƒν™©μ—μ„œλŠ” μš”μ²­μ„ 받은 λ‹€λ₯Έ μ£Όμ²΄μžκ°€ 였히렀 ν•΄λ‹Ή μž‘μ—…μ— λŒ€ν•œ μ±…μž„μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • μš”μ²­μ„ 받은 λ‹€λ₯Έ μ£Όμ²΄μžκ°€ 콜백 ν•¨μˆ˜λ‘œ ν•΄λ‹Ή μž‘μ—…μ„ μ²˜λ¦¬ν•˜κ³  μ™„λ£Œν•©λ‹ˆλ‹€.

 

πŸ’‘ Sync / Async 정리

κ²°κ³Όλ₯Ό λ°˜ν™˜ν–ˆμ„λ•Œ μž‘μ—… μ™„λ£Œμ˜ μ—¬λΆ€λ₯Ό λˆ„κ°€ 더 μ‹ κ²½μ“°λŠλƒμ— 따라 ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

4가지 μ‘°ν•©
  Blocking Non-Blocking
Sync Read/Write Read/Write
O_NONCLOCK
Async i/O multiplexing AIO

 

πŸ’‘ Sync Blocking I/O

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κΈ°κΉŒμ§€ λŒ€κΈ°ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λŒ€κΈ° λ™μ•ˆ 아무것도 ν•  수 μ—†λ‹€λŠ” 것이 κ°€μž₯ 큰 λ‹¨μ μž…λ‹ˆλ‹€.

 

πŸ’‘ Sync Non-Blocking I/O

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ°”λ‘œ λ³΅κ·€ν•˜μ—¬ μžμ‹ μ˜ 일을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ λλ‚¬μŒμ„ μ•ŒκΈ° μœ„ν•΄μ„œ 주기적으둜 μ™„λ£Œλ˜μ—ˆλŠ”μ§€ 확인(Sync)을 ν•΄μ•Όν•©λ‹ˆλ‹€.
  • 주기적으둜 ν™•μΈν•˜λŠ” 사이 λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 μžˆμ§€λ§Œ 계속 ν™•μΈν•΄μ•Όν•˜λŠ” λΉ„νš¨μœ¨μ„±μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ’‘ Async Blocking I/O

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œ ν•΄λ‹Ή μž‘μ—…μ΄ μ™„λ£Œλ  λ•Œ κΉŒμ§€ λŒ€κΈ°μƒνƒœκ°€ λ©λ‹ˆλ‹€. ν•¨μˆ˜ 호좜 ν›„ λ°”λ‘œ 리턴을 λ°›μ§€λ§Œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ‹€λ₯Έ μž‘μ—…μ„ ν•˜μ§€ μ•Šκ³  λŒ€κΈ° μƒνƒœκ°€ λ©λ‹ˆλ‹€.
  • ν•¨μˆ˜μ—μ„œ μž‘μ—…μ΄ λλ‚˜ μ™„λ£Œλ¨μ„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ μ•Œλ¦¬λ©΄μ„œ(Async) μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λŒ€κΈ° μƒνƒœκ°€ ν’€λ¦¬κ²Œ λ©λ‹ˆλ‹€. 

πŸ’‘ Async Non-Blocking I/O

  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  μž‘μ—…μ΄ μ™„λ£Œλ λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜μ§€ μ•Šκ³  μžμ‹ μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • ν•¨μˆ˜λŠ” μž‘μ—…μ„ μ™„λ£Œν•˜λ©΄ κ²°κ³Όλ₯Ό μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ μ•Œλ €μ£Όλ©°, μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μž‘μ—…μ΄ μ™„λ£ŒλλŠ”μ§€ 직업 ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

 

μ°Έκ³ )

https://www.youtube.com/watch?v=IdpkfygWIMk 

https://www.youtube.com/watch?v=oEIoqGd-Sns 

https://www.youtube.com/watch?v=XNGfl3sfErc 

https://ivvve.github.io/2019/10/06/etc/sync&blocking/

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://wbluke.tistory.com/49

https://www.youtube.com/watch?v=mb-QHxVfmcs 

 

 

 

728x90
λ°˜μ‘ν˜•

'JAVA > JAVAκΈ°λ³Έ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μžλ°”μ—μ„œ κ΅μ°©μƒνƒœ  (0) 2023.03.29
RabbitMQλž€?  (0) 2022.06.14
JAVA - String Constant Poolμ΄λž€  (0) 2022.05.15
JAVA - λžŒλ‹€μ‹μ΄λž€?  (0) 2022.02.10
JAVA - μ œλ„€λ¦­μ΄λž€?  (0) 2022.01.30
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
Β«   2024/09   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
κΈ€ 보관함