ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Blocking I/O와 Non-Blocking I/O
    Spring Reactive Web Application/Reactive Programming 2023. 7. 22. 05:00
    반응형

      웹 애플리케이션에서 I/O는 File I/O, DB I/O, 네트워크 I/O 등이 있습니다.

     

    Blocking I/O

      I/O 작업이 진행되는 동안 요청 스레드가 자신의 작업을 중단한 채, I/O 작업이 끝날 때까지 대기하는 것을 의미합니다. Blocking I/O 방식의 문제점을 보완하기 위해 멀티스레딩 기법으로 추가 스레드를 할당하여 차단된 시간을 효율적으로 사용할 수는 있습니다.

     

    멀티스레딩 기법의 문제점

    • 컨텍스트 스위칭(Context Switching)으로 인한 스레드 전환 비용이 발생합니다.

    Note. 컨텍스트 스위칭(Context Switching)

      실행되고 있는 프로세스 정보는 CPU의 레지스터에 저장됩니다. 프로세스들이 번갈아 가며 실행되는 과정에서 PCB(Process Control Block)에 저장된 프로세스 정보가 레지스터에 지속적으로 저장되어 그 값이 변경되는 것을 컨텍스트 스위칭이라고 합니다. 프로세스의 정보를 PCB에 저장, reload 하는 시간 동안 CPU가 다른 작업을 하지 못하고 대기하기에 성능이 저하되는 것입니다.

    • 과다한 메모리 사용으로 오버헤드가 발생할 수 있습니다.

      일반적으로 새로운 스레드가 실행되면 JVM에서는 해당 스레드를 위한 스택(Stack) 영역의 일부를 할당하며, 새로운 스레드의 정보는 스택 영역에 개별 프레임의 형태로 저장됩니다.

    • 스레드 풀(Thread Pool)에서 응답 지연이 발생할 수 있습니다.

      스레드 풀이란 일정 개수의 스레드를 미리 생성해서 풀에 저장해 두고 요청이 들어올 경우, 풀에서 꺼내 사용할 수 있도록 하는 일종의 스레드 저장소입니다. 요청이 들어올 때마다 스레드를 처음부터 새로 생성하면 생성과 수거 비용이 많이 들기에 스레드 풀을 사용하는데, 대량의 요청이 발생하게 되면 사용 가능한 스레드가 확보되기 전까지 응답 지연이 발생합니다.

     

    Non-Blocking I/O

      Non-Blocking I/O는 Blocking I/O와 반대로 스레드가 차단되지 않기 때문에 하나의 스레드로 많은 수의 요청을 처리할 수 있습니다. 즉, Blocking I/O 방식보다 더 적은 수의 스레드를 사용하기에 멀티스레딩 기법을 사용할 때 발생하는 문제점들이 생기지 않습니다. CPU 대기 시간 및 사용량 또한 대단히 효율적입니다.

     

    Non-Blocking I/O의 문제점

    • 스레드 내부에 CPU를 많이 사용하는 작업이 포함된 경우에는 성능에 악영향을 줍니다.
    • 사용자의 요청에서 응답까지의 전체 과정에 Blocking I/O 요소가 포함된 경우에는 Non-Blocking의 이점을 발휘하기 힘듭니다.

    Note. Fully Non-Blocking I/O

      클라이언트가 A서버에서 데이터베이스의 테이블을 조회하고, 조회된 결과를 기반으로 다시 B와 C 서버로 요청을 보내서 결과를 취합하여 반환한다면 DB I/O와 B, C 서버에 요청할 때 발생하는 네트워크 I/O 모두 Non-Blocking이어야 합니다. 어느 하나라도 Blocking I/O 요소가 존재한다면 스레드가 차단되어 병목 구간이 발생합니다.

     

    Spring MVC vs Spring WebFlux

    Spring MVC Spring WebFlux
    Blocking I/O 방식 Non-Blocking 방식
    요청 당 하나의 Thread 사용 하나의 Thread로 대량의 요청 처리
    학습 시간이 상대적으로 짧음 학습 난이도 비교적 높음
    숙련된 개발자 많음 숙련된 개발자 적음

    http://spring.io/reactive
    https://docs.spring.io/spring-framework/docs/5.2.5.RELEASE/spring-framework-reference/web-reactive.html#webflux-framework-choice

     

    Spring WebFlux를 사용하기 적합한 시스템

    • Blocking I/O 방식으로 처리하는데 한계가 있는 대량의 요청 트래픽이 발생하는 시스템
    • 마이크로 서비스 기반 시스템
    • 스트리밍 시스템 또는 실시간 시스템
    • 네트워크 접속이 느린 클라이언트의 요청 처리

     

     

     

     
    반응형

    댓글

Designed by Tistory.