Blocking I/O Vs. Non-Blocking I/O

알파로그·2023년 11월 10일
0

Spring WebFlux

목록 보기
2/13

✏️ Blocking I/O 방식

  • 작업 쓰레드가 종료될 때 까지 요청을 한 쓰레드는 차단된다.
  • 이러한 단점을 보완하기 위해 멀티 쓰레딩 기법으로 추가 쓰레드를 할당 할 수 있다.

📍 Blocking I/O 방식의 단점

  • CPU 대비 많은 수의 쓰레드를 사용하면 비효율 적이 된다.
    • 컨텍스트 스위칭으로 인한 쓰레드 전환 비용 발생
    • 메모리 사용에 있어서 오버헤드 발생
    • 쓰레드 풀에서의 응답 지연 문제 발생

⚠️ 컨텍스트 스위칭 비용 발생

  • 프로세스간의 컨텍스트 스위칭시 CPU 는 실행중이던 프로세스를 PCB 에 저장하고, 실행할 프로세스를 PCB 에서 불러오는 추가시간이 발생한다.
    • 따라서 실행 시점과 유휴 시점이 딱 들어맞지 않게된다.
  • 결국 컨텍스트 스위칭이 잦을수록 CPU 의 전체 대기 시간이 늘어나 성능이 저하된다.

✏️ Non-Blocking I/O 방식

  • 기본적으로 요청을 처리하는 중 쓰레드가 차단되지 않기 때문에 클라이언트로부터 복수의 요청을 받고 외부 API 로 요청을 할 수 있다.

📍 특징

  • 작업 쓰레드의 종료와 상관없이 요청을 한 쓰레드는 차단되지 않는다.
  • 적은 수의 쓰레드를 사용하기 때문에 쓰레드 전환 비용이 적게 발생한다.
    • CPU 대기 시간 및 사용량에 있어서 효율적임

📍 단점

  • CPU 를 많이 사용하는 작업이 표함 되어 있을 경우 성능 향상에 악영향을 준다.
    • 이러한 단점을 보완하기 위해 외부시스템에 작업을 위임하는 방식이 사용된다.
  • 만약 사용자의 요청 ~ 응답 까지의 과정중 하나라도 Blocking I/O 요소가 포함되어 있을 경우 이점을 발위하기 힘들다.
profile
잘못된 내용 PR 환영

0개의 댓글