Blocking vs Non-Blocking
Blocking
- ν μμ
μ΄ μλ£λ λκΉμ§ νλ‘κ·Έλ¨μ μ€νμ΄ μ€μ§λ¨
- μλ₯Ό λ€μ΄, μλ²μ λ°μ΄ν°λ₯Ό μμ²νλ κ²½μ°, μλ²λ‘λΆν° μλ΅μ΄ μ¬ λκΉμ§ νλ‘κ·Έλ¨μ μΌλ°μ μΌλ‘ 'λκΈ°' μν
- μ΄ μκ° λμμλ νλ‘κ·Έλ¨μ΄ λ€λ₯Έ μ΄λ€ μμ
λ μννμ§ μλλ€
- CPUλ λΉν¨μ¨μ μΌλ‘ μ¬μ©λ¨
- νλ‘κ·Έλ¨μ μ 체 μ€ν μκ°μ μλ²μ μλ΅ μκ°μ ν¬κ² μμ‘΄
Non-Blocking
- ν μμ
μ΄ μλ£λλ κ²μ κΈ°λ€λ¦¬μ§ μκ³ λ€μ μμ
μ μ¦μ μμ
- μλ₯Ό λ€μ΄, μλ²μ λ°μ΄ν°λ₯Ό μμ²ν ν, μλ΅μ κΈ°λ€λ¦¬λ λμ μ¦μ λ€λ₯Έ μμ
μ μμν μ μμ
- μ΄ λ°©μμ CPUλ₯Ό λ³΄λ€ ν¨μ¨μ μΌλ‘ μ¬μ©νλ©°, νλ‘κ·Έλ¨μ μ 체 μ€ν μκ°μ λ¨μΆμν¬ μ μμ
- κ·Έλ¬λ μ΄λ° λ°©μμ νλ‘κ·Έλ¨μ 볡μ‘μ±μ μ¦κ°μν¬ μ μμ
- μ¬λ¬ μμ
μ΄ λμμ μ€νλλ©΄μ λ°μ΄ν°μ μνλ₯Ό μΆμ νκ³ μ μ΄νλ κ²μ΄ λ μ΄λ €μμ§κΈ° λλ¬Έ
Synchronous vs Asynchronous
Synchronous(λκΈ°)
- μμ²κ³Ό κ·Έμ λν μλ΅μ΄ μμ°¨μ μΌλ‘ μ΄λ£¨μ΄μ§
- μμ
Aλ₯Ό μμνκ³ , μμ
Aκ° μλ£λλ©΄ κ·Έ λ€μ μμ
μΈ Bλ₯Ό μμ
- νλ‘κ·Έλ¨μ νλ¦μ μ½κ² μΆμ ν μ μμ
- μμ μμ
μ΄ μκ°μ΄ μ€λ 걸릴 κ²½μ° λ€λ°λ₯΄λ μμ
λ€μ λκΈ°ν΄μΌ νλ λ¨μ
Asynchronous(λΉλκΈ°)
- μμ²κ³Ό μλ΅μ΄ λμμ μ΄λ£¨μ΄μ§ μ μμ
- μμ
Aλ₯Ό μμν ν, μμ
Aμ μλ£λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ°λ‘ λ€μ μμ
Bλ₯Ό μμνλ λ°©μ
- 볡μ‘ν μμ
μ λ³λ ¬λ‘ μ²λ¦¬ν μ μμ΄ ν¨μ¨μ
- μμ
κ°μ μμ‘΄μ±μ κ΄λ¦¬νκ±°λ μ€λ₯λ₯Ό μΆμ νλ κ²μ΄ 볡μ‘ν΄μ§ μ μμ
Blocking vs Non-Blocking κ³Ό Synchronous vs Asynchronous
κ°κ°μ κ°λ
μ λν κ°λ
λ€μ μ 리
- Blocking vs Non-Blocking
- Blocking
- νΈμΆλ ν¨μκ° μμ μ μμ
μ μλ£ν λκΉμ§ μ μ΄κΆμ λ°ννμ§ μλλ€
- νΈμΆμλ κ²°κ³Όκ° μ€λΉλ λκΉμ§ λκΈ°ν΄μΌ νλ€
- Non-Blocking
- νΈμΆλ ν¨μκ° μ¦μ μ μ΄κΆμ λ°ννλ€
- νΈμΆμλ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μμ
μ κ³μν μ μλ€
- Synchronous vs Asynchronous
- Synchronous(λκΈ°)
- μμ
μ΄ μμ°¨μ μΌλ‘ μ€νλλ€
- ν μμ
μ΄ μλ£λλ©΄ λ€μ μμ
μ΄ μμλλ€
- Asynchronous(λΉλκΈ°)
- μμ
μ΄ λμμ μ€νλ μ μλ€
- ν μμ
μ΄ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μμ
μ μμν μ μλ€
μ ν·κ°λ¦΄κΉ?
- Blockingκ³Ό Synchronous λ°©μμ΄ λͺ¨λ λκΈ°λΌλ κ°λ
μ ν¬ν¨νκ³ μκΈ° λλ¬Έ
- Blockingμμλ νΈμΆλ ν¨μκ° μμ
μ μλ£ν λκΉμ§ λκΈ°
- Synchronousμμλ μ΄μ μμ
μ΄ μλ£λ λκΉμ§ λ€μ μμ
μ΄ λκΈ°
- κ·Έλ¬λ μλ‘ λ€λ₯Έ κ°λ
μ΄λ€
- Blockingμ νΈμΆμμ νΌνΈμΆμ κ°μ κ΄κ³μ μ΄μ
- Synchronousλ μμ
κ°μ μκ° κ΄κ³μ μ΄μ
- μλ‘ λ
립μ μΈ κ°λ
μ΄κΈ°μ, μλ‘ κ²°ν©λΌ μ¬μ©λ μ μμ
- e.g. Synchronous/Non-Blocking λ°©μμμλ μμ
μ΄ μμ°¨μ μΌλ‘ μ€νλμ§λ§, κ° μμ
μ μ¦μ μ μ΄κΆμ λ°ννμ¬ λ€μ μμ
μ΄ μμν μ μμ
κ° μΌμ΄μ€λ³ μμ
Blocking-Synchronous
- HTTP μμ²
- ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²μ 보λ΄λ©΄, μλ²μ μλ΅μ κΈ°λ€λ¦¬λ λμ ν΄λΌμ΄μΈνΈλ λ€λ₯Έ μμ
μ μνν μ μμ
- μμ²μ λ³΄λΈ ν μλ΅μ λ°μ λκΉμ§μ νλ‘μΈμ€κ° μμ°¨μ μΌλ‘ μ§νλλ©°, μλ΅μ κΈ°λ€λ¦¬λ λμ λ€λ₯Έ μμ
μ μννμ§ λͺ»νλ―λ‘ Blocking μν
Non-Blocking-Synchronous
- UI
- μ¬μ©μκ° λ²νΌμ ν΄λ¦νλ©΄ ν΄λΉ μμ
μ μ²λ¦¬νκ³ λμμ λ€λ₯Έ μμ
λ κ³μ μ§νν μ μμ
- Synchronous(μμ°¨μ μΈ) ν΅μ μ΄μ§λ§, μλ΅μ κΈ°λ€λ¦¬λ λμ λ€λ₯Έ μΌμ κ³μ ν μ μλ(Non-Blocking) μν©
- GUI νλ‘κ·Έλλ°μμ μ΄λ²€νΈ 루ν
- μ΄λ²€νΈ 루νλ μ΄λ²€νΈκ° λ°μνλ©΄ μ μ ν μ΄λ²€νΈ νΈλ€λ¬λ₯Ό λκΈ°μ μΌλ‘ νΈμΆνμ§λ§, νΈλ€λ¬ μ€ν μλ£λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μ΄λ²€νΈλ₯Ό 체ν¬
- μμ°¨μ μΈ μ€νμ΄μ§λ§, λ€μ μμ
μ κΈ°λ€λ¦¬μ§ μλ Non-Blocking μν
Blocking-Asynchronous
- λ©ν°μ€λ λ νλ‘κ·Έλλ°μμ μ€λ λκ° λ½(lock)μ κΈ°λ€λ¦¬λ κ²½μ°
- μ¬λ¬ μ€λ λκ° λμμ μ€νλμ§λ§(Asynchronous), νΉμ μμμ λν μ κ·Όμ μ μ΄νκΈ° μν΄ λ½μ κΈ°λ€λ¦¬λ κ²½μ°(Blocked)
- 볡μ‘ν μμ
μ λ³λ ¬λ‘ μ²λ¦¬ν μ μμ§λ§, λκΈ°ν λ¬Έμ λ₯Ό ν΄κ²° νμ
Non-Blocking-Asynchronous
- κ³ μ±λ₯ μλ²λ λ°μ΄ν°λ² μ΄μ€
- μλ²κ° λμμ μ¬λ¬ μμ²μ μ²λ¦¬νκ±°λ, λ°μ΄ν°λ² μ΄μ€κ° λμμ μ¬λ¬ 쿼리λ₯Ό μ€νν λ μ¬μ©
- Asynchronous(λΉλκΈ°μ μΈ) ν΅μ μ΄λ©°, ν μμ²μ μ²λ¦¬κ° λλ λκΉμ§ λ€λ₯Έ μμ²μ μ²λ¦¬λ₯Ό κΈ°λ€λ¦¬μ§ μλ(Non-Blocking) μν©
- λμ μ²λ¦¬λμ λ¬μ±ν μ μμ§λ§, 볡μ‘ν λ‘μ§μ κ΄λ¦¬ν΄μΌ ν¨
- Node.jsμ I/O μ²λ¦¬
- Node.jsλ λΉλκΈ°μ μΌλ‘ I/O μμ²μ μ²λ¦¬νλ©°, μμ²μ΄ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€μ μ½λλ₯Ό μ¦μ μ€ν
- λΉλκΈ°μ μΈ μ€ν(Asynchronous)μ΄λ©°, I/O μμ²μ μλ£λ₯Ό κΈ°λ€λ¦¬μ§ μλ Non-Blocking μν
Summary
- μ΄ λ€ κ°μ§ κ°λ
μ μλ² μλ΅ μκ°, CPU μ¬μ©λ₯ , λ³λ ¬ μ²λ¦¬ κ°λ₯μ±, μ½λ 볡μ‘μ± λ± μ¬λ¬ μμλ₯Ό κ³ λ €νμ¬ νλ‘κ·Έλ¨μ μ±λ₯κ³Ό ν¨μ¨μ±μ ν₯μμν€λ λ° μ€μν μν μ νλ€
- λ°λΌμ μ΄λ¬ν μμλ€μ κ³ λ €νμ¬ μν©μ λ§λ μ΅μ μ λ°©μμ μ νν΄μΌ νλ€