JAVA - Blocking vs Non-Blocking & Sync vs Async
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://www.youtube.com/watch?v=mb-QHxVfmcs