Chapter03. Blocking I/O와 Non-Blocking I/O

김신영·2023년 7월 28일
0

Spring WebFlux

목록 보기
3/13
post-thumbnail

Blocking vs Non-Blocking

  • 호출되는 함수가 바로 리턴하는지 여부가 관심사
  • blocking
    • 바로 리턴 하지 않는다.
  • non-blocking
    • 바로 리턴 한다.

Sync vs Async

  • 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사
  • 동기(sync)
    • 호출되는 함수의 작업 완료 여부를, 호출 하는 함수가 신경씀.
  • 비동기(async)
    • 호출되는 함수의 작업 완료 여부를, 호출 되는 함수가 신경씀.

blocking, non-blocking IO, 동기, 비동기 개념 정리

Blocking I/O

하나의 스레드가 I/O에 의해서 차단되어 대기하는 것

  • File I/O
  • DB I/O
  • Network I/O
  • Blocking I/O 방식의 문제점을 보완하기 위해서, 멀티스레딩 기법 도입
    • 추가 스레드를 할당하여, 차단된 대기 시간을 효율적으로 사용할 수 있다.

image

Multi Thread 기법의 문제점

  • Context Switching 으로 인한 스레드 전환 비용이 발생
  • 과다한 메모리 사용으로 오버헤드가 발생할 수 있다.
    • Servlet 컨테이너 기반의 Java 웹 애플리케이션은 요청당 하나의 스레드(Thread per Request)를 할당한다.
  • Thread Pool 에서 응답 지연이 발생할 수 있다.

참고

Context Switching

현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말합니다.

PCB

  • Process Control Block
  • 기존에 실행되고 있는 프로세스의 정보를 저장하는 공간

TCB

  • Thread Control Block
  • 기존에 실행되고 있는 스레드 정보를 저장하는 공간

Non-Blocking I/O

작업 스레드의 종료 여부와 관계없이 요청한 스레드는 차단되지 않는다.

  • 하나의 스레드로 많은 수의 요청을 처리할 수 있다.
  • Blocking I/O 방식보다 더 적은 수의 스레드 사용
  • 멀티스레딩 기법을 사용할 때 문제점들이 생기지 않는다.
  • CPU 대기 시간 및 사용량이 효율적!

image

Non-Blocking I/O 문제점

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

Fully Non-Blocking I/O

  • 어느 하나라도 Blocing I/O 요소가 존재한다면
    • 스레드가 차단되면서 병목 구간이 발생한다.

Non-Blocking I/O 방식의 통신이 적합한 시스템

1. 대량의 요청 트래픽이 발생하는 시스템

  • 서버 증설이나 VM 확장 등을 통해 트래픽을 분산할 수 있다
    • 하지만, 높은 비용!
  • Spring WebFlux 기반 애플리케이션은 상대적으로 저비용으로 고수준의 성능

2. 마이크로 서비스 기반 시스템

  • 마이크로 서비스 기반의 시스템은 특성상 서비스들 간에 많은 수의 I/O가 지속적으로 발생
  • 따라서 특정 서비스들 간의 통신에서 Blocking으로 인한 응답 지연이 발생
  • 응답 지연의 연쇄 작용으로 시스템 전체가 마비될 수 있음

3. 스트리밍 또는 실시간 시스템

  • 무한한 데이터 스트림을 전달받아서 효율적으로 처리 가능
    • 당연히, HTTP 통신이나 데이터베이스 조회와 같은 일회성 연결도 가능
profile
Hello velog!

0개의 댓글