개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문

패스트캠퍼스

패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기

slow-walker 2024. 2. 18. 22:40

 

1. ChannelHandlerContext에서 별도의 EventExecutor를 지원하는 이유가 무엇일까?

https://medium.com/@joosing711/netty-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%A0%84%EC%86%A1-%ED%9D%90%EB%A6%84-d17a0350b595 에서 캡처한 사진

 

ChannelHandlerContext에서 별도의 EventExecutor를 지원하는 이유는 다양한 스레드 모델과 비동기 처리에 대한 유연성을 제공하기 위함입니다.

  1. 다양한 스레드 모델
    • ChannelHandlerContext는 네트워크 이벤트 핸들러의 컨텍스트를 나타냅니다.
    • 다양한 스레드 모델을 지원하기 위해, 이벤트 핸들러가 실행되는 스레드를 명시적으로 설정할 수 있어야 합니다.
  2. 비동기 처리
    • 네트워크 이벤트 핸들러는 주로 I/O 작업을 수행하고 블로킹을 피해야 합니다.
    • EventExecutor를 통해 비동기적으로 작업을 수행할 수 있으며, 이는 높은 성능과 동시성을 제공합니다.
  3. 작업 분산
    • EventExecutor를 통해 이벤트 핸들러가 특정 스레드에서 실행되는 것이 아니라, 작업을 특정 스레드 풀에 분산시킬 수 있습니다.
    • 작업 분산은 전체 시스템의 효율성을 향상시키고 병목 현상을 방지하는 데 도움이 됩니다.
  4. 스레드 간 통신
    • 다양한 스레드에서 실행되는 이벤트 핸들러 간에 데이터를 안전하게 전달하기 위해 EventExecutor를 사용할 수 있습니다.
    • 스레드 간 통신을 통해 정보 교환 및 공유가 가능하며, 이를 통해 협력적인 다중 스레드 프로그래밍이 가능해집니다.
  5. 병렬 처리 및 성능 향상
    • 별도의 EventExecutor를 사용하면 병렬 처리가 가능하며, 다수의 작업을 동시에 실행할 수 있습니다.
    • 이는 시스템의 성능을 향상시키고 빠른 응답 시간을 유지할 수 있도록 도와줍니다.
  6. 스레드 풀 구성
    • EventExecutor를 통해 어떤 스레드 풀을 사용할지 유연하게 설정할 수 있습니다.
    • 다양한 스레드 풀 구성을 통해 애플리케이션의 특정 요구사항에 맞게 최적화할 수 있습니다.

 ChannelHandlerContextEventExecutor 정리

  • ChannelHandler에서 시간이 오래 걸리는 연산을 진행한다면?
    • EventLoop쓰레드에서 해당 ChannelHandler에서 blocking
    • EventLoop에 등록된 다른 Channel의 I/O처리 또한 blocking
    • 해당ChannelHandler에서는EventLoop쓰레드가아닌다른쓰레드풀을사용한다면?
  • 이를 위해서 ChannelHandlerContext에 등록된 EventExecutor가 있다면
    • next context가 다쓰레드풀에서 동작해하는구나 라고
    • 직접 이벤트처리를 호출하지 않고 executor.executetaskQueue에 넣고 EventLoop쓰레드복귀

 


 

※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N