[CS] Blocking I/O & Non-Blocking I/O

  • μž…μΆœλ ₯ μž‘μ—…μ€ 컀널 λ ˆλ²¨μ—μ„œλ§Œ μˆ˜ν–‰ν•  수 μžˆμœΌλ―€λ‘œ ν”„λ‘œμ„ΈμŠ€ 및 μŠ€λ ˆλ“œλŠ” μ»€λ„μ—κ²Œ I/Oλ₯Ό μš”μ²­ν•΄μ•Ό 함. 즉, ν”„λ‘œμ„ΈμŠ€ 및 μŠ€λ ˆλ“œλŠ” ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜, I/Oμž‘μ—…μ€ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ 됨

Blocking I/O

  • I/O μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ μœ μ € ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ μ˜ μž‘μ—…μ„ μ€‘λ‹¨ν•œ 채, I/Oκ°€ λλ‚ λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜λŠ” 방식

→ Read()λ₯Ό ν˜ΈμΆœν•΄ 컀널에 read I/Oλ₯Ό μš”μ²­ν•˜λ©΄, readκ°€ 끝날 λ•ŒκΉŒμ§€ application은 blockλ˜μ–΄ λ‹€λ₯Έ μž‘μ—…μ„ ν•˜μ§€ λͺ»ν•¨

  • 컀널 μž‘μ—…μ€‘μ— ν”„λ‘œμ„ΈμŠ€/μŠ€λ ˆλ“œλŠ” μžμ‹ μ˜ μž‘μ—…μ„ μ€‘λ‹¨ν•˜κ³  λŒ€κΈ°
  • 컀널 μž‘μ—… 쀑 CPU μžμ›μ„ 쓰지 μ•ŠμœΌλ―€λ‘œ μžμ›λ‚­λΉ„κ°€ 심함
  • μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ ‘μ†ν•˜λŠ” μ„œλ²„μΈ 경우, I/O μž‘μ—…μ„ ν˜ΈμΆœν•œ μž‘μ—…μ€ μ€‘μ§€λ˜μ–΄λ„ λ‹€λ₯Έ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€ν–‰ν•˜λŠ” μž‘μ—…μ€ μ€‘μ§€λ˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈ λ³„λ‘œ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜κ²Œ λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μˆ˜κ°€ 맀우 λ§Žμ•„μ§

Nonblocking I/O

  • Aν•¨μˆ˜κ°€ I/Oμž‘μ—…μ„ ν˜ΈμΆœν–ˆμ„ λ•Œ, I/O μž‘μ—…μ΄ μ™„λ£Œλ λ•ŒκΉŒμ§€ Aν•¨μˆ˜μ˜ μž‘μ—…μ„ μ€‘λ‹¨ν•˜μ§€ μ•Šκ³  I/O ν˜ΈμΆœμ— λŒ€ν•΄ μ¦‰μ‹œ λ¦¬ν„΄ν•˜κ³ , Aν•¨μˆ˜κ°€ μ΄μ–΄μ„œ λ‹€λ₯Έ 일을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•˜λŠ” 방식을 의미

→ read I/Oλ₯Ό ν•˜κΈ° μœ„ν•΄ system call을 μˆ˜ν–‰ν•˜λ©΄, μ»€λ„μ˜ I/O μž‘μ—… μ™„λ£Œ μ—¬λΆ€μ™€λŠ” λ¬΄κ΄€ν•˜κ²Œ μ¦‰μ‹œ 응닡

  • 컀널 μž‘μ—…μ€‘μ— ν”„λ‘œμ„ΈμŠ€/μŠ€λ ˆλ“œλŠ” μžμ‹ μ˜ μž‘μ—…μ„ 진행
  • 컀널이 μ‹œμŠ€ν…œ μ½œμ„ λ°›μžλ§ˆμž CPU μ œμ–΄κΆŒμ„ λ‹€μ‹œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ λ„˜κ²¨μ€˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ I/O μž‘μ—…μ΄ μ™„λ£Œλ˜κΈ° 전에 λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있음 + μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ‹€κ°€ 쀑간쀑간 μ‹œμŠ€ν…œ μ½œμ„ λ³΄λ‚΄μ„œ I/Oκ°€ μ™„λ£ŒλλŠ”μ§€ μ»€λ„μ—κ²Œ 물어보고, μ™„λ£Œλ˜λ©΄ I/Oμž‘μ—…μ„ μ™„λ£Œν•¨

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

[CS] Blocking/Non-blocking & Synchronous/Asynchronous  (1) 2024.01.30
[CS] Load Balancing (λ‘œλ“œλ°ΈλŸ°μ‹±)  (0) 2024.01.26
[CS] TLS/SSL HandShake  (0) 2024.01.26
[CS] HTTP & HTTPS  (0) 2024.01.26
[CS] λŒ€μΉ­ν‚€ & κ³΅κ°œν‚€  (1) 2023.11.29