Blocking vs Non-blocking

Blockingκ³Ό Non-blocking

β†’ μ œμ–΄μ˜ 관점

Blocking

  • I/Oκ°€ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” 것

    • why?

      • λλ‚˜κΈ° μ „μ—λŠ” ν•¨μˆ˜κ°€ return λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€

  • 컀널이 μž‘μ—…μ„ μ™„λ£Œν•˜κΈ° μ „κΉŒμ§€ μœ μ € ν”„λ‘œμ„ΈμŠ€λŠ” μž‘μ—…μ„ μ€‘λ‹¨ν•œ 채 λŒ€κΈ° ν–‰ν•œλ‹€

  • I/O μž‘μ—…μ΄ CPU μžμ›μ„ 거의 쓰지 μ•ŠκΈ° λ•Œλ¬Έμ— blocking 방법은 CPU μžμ› λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€

  • 동기화λ₯Ό μœ„ν•΄ blocking을 ν•œλ‹€

Blocking vs Synchronous

  • μ‹œμŠ€ν…œμ˜ λ°˜ν™˜μ„ κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ λŒ€κΈ° 큐에 λ¨Έλ¬΄λŠ” 것이 ν•„μˆ˜κ°€ μ•„λ‹ˆλ©΄ synchronous

  • μ‹œμŠ€ν…œμ˜ λ°˜ν™˜μ„ κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ λŒ€κΈ° 큐에 λ¨Έλ¬΄λŠ” 것이 ν•„μˆ˜μ΄λ©΄ blocking

Non-blocking

  • Blocking λ°©μ‹μ˜ λΉ„νš¨μœ¨μ„±μ„ κ·Ήλ³΅ν•˜κ³ μž λ§Œλ“€μ–΄μ§„ 것

  • I/O μž‘μ—…μ„ μ§„ν–‰ν•˜λŠ” λ™μ•ˆ μœ μ € ν”„λ‘œμ„ΈμŠ€μ˜ μž‘μ—…μ„ μ€‘λ‹¨μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€

  • μœ μ € ν”„λ‘œμ„ΈμŠ€κ°€ I/Oλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 컀널에 ν•¨μˆ˜λ₯Ό 호좜 (system call ) ν•˜λ©΄, μ»€λ„μ—μ„œ ν•¨μˆ˜μ˜ 진행 상황과 상관 없이 λ°”λ‘œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€

    • 이 λ•Œ λ°˜ν™˜λ˜λŠ” κ²°κ³ΌλŠ” λ°˜ν™˜ν•˜λŠ” μˆœκ°„μ— κ°€μ Έμ˜¬ 수 μžˆλŠ” 데이터 에 ν•΄λ‹Ήν•œλ‹€

    • μ²˜μŒμ—λŠ” κ°€μ Έμ˜¬ 수 μžˆλŠ” 데이터가 μ—†κ² μ§€λ§Œ, μ‹œκ°„μ΄ μ§€λ‚˜λ©΄μ„œ κ°€μ Έμ˜¬ 수 μžˆλŠ” 데이터가 μƒκ²¨λ‚œλ‹€

  • 문제점

    • ν΄λΌμ΄μ–ΈνŠΈκ°€ λ”°λ‘œ λ°˜ν™˜λ˜λŠ” 값이 μ›ν•˜λŠ” μ‚¬μ΄μ¦ˆκ°€ λ˜μ—ˆλŠ”μ§€ κ³„μ†ν•΄μ„œ ν™•μΈν•΄μ€˜μ•Ό ν•œλ‹€ λŠ” 것이닀 (polling)

      • λ°˜ν™˜λ˜λŠ” 데이터가 μ€€λΉ„λ˜μ—ˆλŠ”μ§€ (μ›ν•˜λŠ” 값이 λ˜μ—ˆλŠ”μ§€) ν™•μΈν•˜λŠ” κ³Όμ •μ—μ„œ μˆ˜λ§Žμ€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ™μ‹œ λ‹€λ°œμ μœΌλ‘œ 일어날 경우, CPU에 적지 μ•Šμ€ 뢀담이 될 수 μžˆλ‹€

Non-blocking vs Asynchronous

  • system call이 λ°˜ν™˜λ  λ•Œ μ‹€ν–‰λœ κ²°κ³Ό (데이터)와 ν•¨κ»˜ λ°˜ν™˜λ  경우 non-blocking

  • system call이 λ°˜ν™˜ 될 λ•Œ μ‹€ν–‰λœ κ²°κ³Ό (데이터)와 ν•¨κ»˜ λ°˜ν™˜λ˜μ§€ μ•ŠλŠ” 경우 asynchronous

  • 정리

    • 비동기 방식은 데이터λ₯Ό 콜백 ν•¨μˆ˜ λ˜λŠ” 이벀트, signal둜 μ „λ‹¬ν•˜κ²Œ λ˜λŠ” 것

    • Non-blocking 방식은 맀 system call return에 데이터가 ν¬ν•¨λ˜μ–΄, return λ˜λŠ” 데이터가 μš”μ²­ν•œ 데이터가 μ „λΆ€ λ„λ‹¬ν–ˆλŠ”μ§€λ₯Ό νŒŒμ•…ν•˜κ²Œ λœλ‹€

Blocking vs Non-blocking

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ 운영체제 λŒ€κΈ° 큐에 λ“€μ–΄κ°€λ©΄μ„œ μš”μ²­μ— λŒ€ν•œ system call이 μ™„λ£Œλœ 후에 응닡을 보낼 경우 blocking

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ 운영체제 λŒ€κΈ° 큐에 듀어가지 μ•Šκ³  μ‹€ν–‰ 여뢀와 관계 없이 λ°”λ‘œ 응닡 을 보낼 경우 non-blocking

정리

  • Blocking vs Non-Blocking β†’ μ œμ–΄μ˜ 관점

  • Sync vs Async β†’ μˆœμ„œμ™€ κ²°κ³Ό(처리)의 관점

Last updated