Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문
패스트캠퍼스
패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기
slow-walker 2024. 2. 18. 22:40
1. ChannelHandlerContext에서 별도의 EventExecutor를 지원하는 이유가 무엇일까?
ChannelHandlerContext에서 별도의 EventExecutor를 지원하는 이유는 다양한 스레드 모델과 비동기 처리에 대한 유연성을 제공하기 위함입니다.
- 다양한 스레드 모델
- ChannelHandlerContext는 네트워크 이벤트 핸들러의 컨텍스트를 나타냅니다.
- 다양한 스레드 모델을 지원하기 위해, 이벤트 핸들러가 실행되는 스레드를 명시적으로 설정할 수 있어야 합니다.
- 비동기 처리
- 네트워크 이벤트 핸들러는 주로 I/O 작업을 수행하고 블로킹을 피해야 합니다.
- EventExecutor를 통해 비동기적으로 작업을 수행할 수 있으며, 이는 높은 성능과 동시성을 제공합니다.
- 작업 분산
- EventExecutor를 통해 이벤트 핸들러가 특정 스레드에서 실행되는 것이 아니라, 작업을 특정 스레드 풀에 분산시킬 수 있습니다.
- 작업 분산은 전체 시스템의 효율성을 향상시키고 병목 현상을 방지하는 데 도움이 됩니다.
- 스레드 간 통신
- 다양한 스레드에서 실행되는 이벤트 핸들러 간에 데이터를 안전하게 전달하기 위해 EventExecutor를 사용할 수 있습니다.
- 스레드 간 통신을 통해 정보 교환 및 공유가 가능하며, 이를 통해 협력적인 다중 스레드 프로그래밍이 가능해집니다.
- 병렬 처리 및 성능 향상
- 별도의 EventExecutor를 사용하면 병렬 처리가 가능하며, 다수의 작업을 동시에 실행할 수 있습니다.
- 이는 시스템의 성능을 향상시키고 빠른 응답 시간을 유지할 수 있도록 도와줍니다.
- 스레드 풀 구성
- EventExecutor를 통해 어떤 스레드 풀을 사용할지 유연하게 설정할 수 있습니다.
- 다양한 스레드 풀 구성을 통해 애플리케이션의 특정 요구사항에 맞게 최적화할 수 있습니다.
ChannelHandlerContext와 EventExecutor 정리
- ChannelHandler에서 시간이 오래 걸리는 연산을 진행한다면?
- EventLoop쓰레드에서 해당 ChannelHandler에서 blocking
- EventLoop에 등록된 다른 Channel의 I/O처리 또한 blocking
- 해당ChannelHandler에서는EventLoop쓰레드가아닌다른쓰레드풀을사용한다면?
- 이를 위해서 ChannelHandlerContext에 등록된 EventExecutor가 있다면
- next context가 다른 쓰레드풀에서 동작해야하는구나 라고 판단
- 직접 이벤트처리를 호출하지 않고 executor.execute로 taskQueue에 넣고 EventLoop쓰레드는 복귀