blocking / non-blocking

1. I/O

Input/Output으둜 μž…/좜λ ₯을 μ˜λ―Έν•œλ‹€. I/Oμ—μ„œ λ°œμƒν•˜λŠ” μ‹œκ°„μ€ CPUλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ³  λŒ€κΈ°ν•˜λŠ” μ‹œκ°„μ΄λ‹€. λ”°λΌμ„œ, μž…μΆœλ ₯이 μ™„λ£Œλ λ•ŒκΉŒμ§€ CPUλŠ” λŒ€κΈ°ν•˜κ³ , μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행속도 λ˜ν•œ λŠλ €μ§€κ²Œ λ˜λŠ” λΉ„νš¨μœ¨μ μΈ ν˜„μƒμ΄ 생긴닀.

μ΄λ•Œ, μž…μΆœλ ₯이 μ™„λ£Œλ˜κΈ° μ „ CPUκ°€ λŒ€κΈ°ν•˜λŠ” μƒνƒœλ₯Ό blockingμƒνƒœλΌκ³  ν•œλ‹€.

2. Blocking I/O

μ„œλ‘ μ—μ„œ μ–˜κΈ°ν•œ μž…μΆœλ ₯이 μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€ CPUκ°€ λŒ€κΈ°ν•˜λŠ” 방식을 bloking I/O라고 ν•œλ‹€.

λΈ”λ‘œν‚Ή

μœ„ μ‚¬μ§„μ—μ„œ λ³΄λŠ” κ²ƒμ²˜λŸΌ, μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μž…μΆœλ ₯ μš”μ²­μ„ 보낸뒀 μ™„λ£Œλœ 데이터λ₯Ό μˆ˜μ‹  ν•  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•œλ‹€. 즉, μž…μΆœλ ₯ μž‘μ—… μ™„λ£Œ μ „κΉŒμ§€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ‹€λ₯Έ μž‘μ—…μ„ μ‹€ν–‰ν•˜μ§€ λͺ»ν•œλ‹€λŠ” 것이닀.

3. Non-Blocking I/O

Blocking I/O λͺ¨λΈμ—μ„œ ν•˜λ‚˜μ˜ μž…μΆœλ ₯ μž‘μ—… μ™„λ£Œ μ „κΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ λͺ»ν•œλ‹€λŠ” 것은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉœλ‹€. 이것을 blocking ν•˜μ§€ μ•ŠλŠ” ν˜•νƒœμ˜ μž…μΆœλ ₯방식을 톡해 ν•΄κ²°ν•˜λŠ”λ° λ°”λ‘œ Non-blocking I/O이닀.

λ…ΌλΈ”λ‘œν‚Ή

Non-blocking I/OλŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μž…μΆœλ ₯ μš”μ²­μ„ λ³΄λ‚΄λŠ” μˆœκ°„ κ²°κ³Ό λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.(μž…λ ₯ 데이터가 μ—†λ‹€λ©΄ μ—λŸ¬ λ©”μ‹œμ§€ λ°˜ν™˜) λ˜ν•œ, μ œμ–΄κΆŒμ„ λ„˜κ²¨μ£Όμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ²°κ³Ό λ©”μ‹œμ§€λ₯Ό 받은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ¦‰μ‹œ μž‘μ—…μ„ μ΄μ–΄μ„œ μ‹€μ‹œ ν• μˆ˜ μžˆλ‹€. μ΅œμ’…μ μœΌλ‘œ μž…λ ₯ 데이터가 λ°œμƒν•˜λ©΄, μœ μ €μ—κ²Œ κ²°κ³Ό 데이터λ₯Ό λ¦¬ν„΄ν•˜κ²Œ λœλ‹€.

μ•žμ„  Blocking I/O와 비ꡐ해 보면 ν™•μ‹€νžˆ blocking μ‹œκ°„μ„ μ€„μΌμˆ˜ μžˆλ‹€λŠ” μ μ—μ„œ νš¨μœ¨μ μ΄λ‹€.

ν•˜μ§€λ§Œ Blocking I/O 보닀 μ‹œμŠ€ν…œ 호좜이 반볡적으둜 이루어지기 λ•Œλ¬Έμ— μžμ›λ‚­λΉ„κ°€ λ°œμƒν•œλ‹€.

Last updated