Blocking, Non-Blocking I/O 그리고 Synchronous/Asynchronous

과녁스·2024년 10월 30일
0

CS

목록 보기
7/7

Blocking I/O

Blocking I/O는 입출력 작업이 완료될 때까지 프로그램의 실행을 중단시키는 방식입니다.

  • 프로세스가 I/O 작업을 요청하면, 해당 작업이 완료될 때까지 대기
  • 대기 중에는 다른 작업을 수행할 수 없음
  • 주로 JDBC를 통한 데이터베이스 쿼리나 동기적 메소드 호출 등에서 사용

Non-Blocking I/O

Non-Blocking I/O는 입출력 작업의 완료 여부와 관계없이 프로그램이 계속 실행되는 방식입니다.

  • I/O 작업을 요청한 후 즉시 제어권을 반환받아 다른 작업을 수행 가능
  • I/O 작업의 완료 여부는 주기적으로 확인하거나 콜백 등을 통해 알림을 수신
  • 다중 연결을 효율적으로 처리할 수 있어 확장성이 높음

Blocking, Non-Blocking I/O 차이점

  1. 제어권: Blocking I/O는 I/O 작업 동안 제어권을 커널에 넘기지만, Non-Blocking I/O는 애플리케이션이 제어권을 유지
  2. 리소스 활용: Blocking I/O는 I/O 대기 중 CPU 자원을 낭비할 수 있지만, Non-Blocking I/O는 더 효율적으로 리소스를 활용 가능
  3. 구현 복잡성: Blocking I/O는 구현이 간단하지만, Non-Blocking I/O는 상대적으로 복잡한 구현이 필요
  4. 확장성: Non-Blocking I/O는 다중 연결 처리에 더 적합하여 높은 확장성을 제공

Synchronous(동기)

  • 작업 요청 후 그 결과를 직접 받아 처리
  • 요청한 작업이 완료될 때까지 계속 관심을 가지고 대기
  • 작업 순서가 보장되며, 로직이 단순하고 직관적

Asynchronous(비동기)

  • 작업 요청 후 결과를 기다리지 않고 다른 작업을 수행
  • 작업 완료 시 콜백, 이벤트 등을 통해 결과를 전달받아 처리
  • 자원을 효율적으로 사용할 수 있지만, 로직이 복잡도 상승

Blocking/Non-Blocking과 동기/비동기의 차이점

Blocking과 Non-Blocking은 작업 수행 시 제어권에 관련되어 있습니다. 그렇다면 동기/비동기와 Blocking/Non-Blocking의 차이점에 대하여 알아보면 다음과 같습니다.

  1. 관심사의 차이:
  • Blocking/Non-Blocking은 I/O 작업 수행 시 제어권에 관한 것
  • 동기/비동기는 작업 완료 후 결과 처리 방식에 관한 것
  1. 작업 처리 방식:
  • Blocking은 작업 완료까지 대기하고, Non-Blocking은 즉시 반환
  • 동기는 작업 완료를 직접 확인하고, 비동기는 완료 시 통지를 받음
  1. 자원 활용:
  • Non-Blocking과 비동기 방식이 일반적으로 자원을 더 효율적으로 활용 가능
  1. 구현 복잡성:
  • Blocking과 동기 방식이 구현이 더 단순하고 직관적인 경향

출처

profile
ㅎㅅㅎ

0개의 댓글