Netty
1. 비동기 이벤트 기반의 네트워크 어플리케이션 프레임워크
2. Http 등 다양한 프로토콜 지원
3. Java IO, NIO, selector 기반의 저 리소스 고 성능 보장
4. 불필요한 메모리 copy를 최소한으로, 유연하며 확장 가능한 이벤트 모델 기반이다.
5. 서버 및 클라이언트 모두 지원된다.
NIOEventLoop
- EventExecutor, TaskQueue, Selector를 포함한다
- EventExecutor : task를 실행하는 쓰레드풀
- TaskQueue : task를 저장하는 queue
eventExecutor가 즉시 task를 수행하지 않고 taskQueue에 넣은 후, 나중에 꺼내서 처리 가능
- Selector : I/O Multiplexing을 지원
NIOEventLoop task
- I/O task와 Non I/O task로 구분
- I/O task : register를 통해서 내부의 selector에 channel을 등록, I/O 준비 완료 이벤트가 발생 시 channel의 pipeline 실행
- Non I/O task : task queue에서 Runnable 등 실행 가능한 모든 종류의 task를 꺼내서 실행
- iorRatio를 설정하여 각각 task 수행에 얼마나 시간을 쓸지 설정 가능하며 기본값은 50이다.
- 50인 경우 I/O, Non I/O task에 동일한 시간을 소모, 100이면 시간을 측정하지 않고 task 수행
NIOEventLoop I/O Task
- NIOEventLoopGroup을 사용, NIO를 수행하는 ServerSocketChannel을 생성, accept network I/O 이벤트를 eventLoop에 등록
- 하나의 eventLoopGroup에 여러 개의 channel 등록 가능
- I/O 이벤트 완료 시 channel의 pipeline 실행
NIOEventLoop Non I/O Task
- Executor처럼 Non I/O task 수행
- 하나의 쓰레드에서 수행하여 순서 보장
EventLoopGroup
- EventLoop를 포함하는 group, 생성자를 통해 내부에 몇 개의 EventLoop를 포함할 지 설정 가능
- 각각의 eventLoop에 순차적으로 task가 추가, 순서가 보장되지 않지만
eventExecutor 기준으로 보았을 때 순서가 보장
ChannelFuture
- Channel I/O 작업이 완료되면 isDone이 true가 되는 Future
- futureListener 등록/삭제를 지원함 (addListener, removeListener) 따라서 Future의 .get()으로 접근하지 않아 비동기 가능
1) addListener : Channel I/O 작업이 완료되면 수행할 futureListener
2) removeListener : 등록된 futureListener 제거용
3) sync : 작업이 완료될때까지 blocking 역할
NioServerSocketChannel
- Netty에서는 java nio channel을 사용하지 않고 자체 구현함
- AbstractChannel은 pipieline을 갖고, AbstractNioChannel은 SelectableChannel을 갖는다.
'Spring Boot(JAVA)' 카테고리의 다른 글
6. Reactive - Reactor Schedulers (0) | 2024.04.05 |
---|---|
5. Reactive - Reactor와 연산자 (0) | 2024.04.04 |
4. Reactive - Spring MVC VS Webflux (0) | 2024.04.04 |
2. Reactive - CompletableFuture (0) | 2024.04.04 |
1. Reactive - 함수형 인터페이스 / 블로킹 & 논블로킹 (0) | 2024.04.04 |