WebFlux란?
-
CPU Bound와 I/O Bound의 성능을 향상시키기 위해 비동기 프로그래밍을 지원하는 Spring 프레임워크의 모듈이다.
-
CPU Bound
- CPU를 중점적으로 사용하는 작업을 말한다.
- 예를 들면 암호화, 압축과 같은 수학적 알고리즘 또는 다수의 데이터를 집계하는 작업이 있다.
-
IO Bound
- 입출력 장치에 중점적인 작업을 의미한다.
- 예를 들면 파일 입출력, 네트워크 통신과 같은 작업이 있다.
Block vs Non-Block
- Block 서버 코드 예시
- Non-Block 서버 코드 예시
IO Multiplexing
- IO 요청 결과를 커널에서 완료된 내용을 이벤트 단위로 알려주는 방식이다.
- 진행 방식
- 이벤트를 등록하기 대기한다.
- 연결이나 데이터 수신이 발생하면 커널로부터 이벤트를 수신받는다.
- 다수의 소켓에 대해서 등록을 할 수 있기 때문에 하나의 스레드로 다수의 소켓을 처리할 수 있다.
- 👇 IO Multiplexing 예제 코드