• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Proactor pattern
        2023년 11월 20일
        • starryeye
        • 작성자
        • 2023.11.20.:27
        반응형

        Reactor pattern 에 이어서 Proactor pattern 을 알아보겠다.

        두 패턴을 가르켜 Event handling pattern 이라 부르기도 한다.

         

        Proactor 패턴

        Reactor 패턴에서는 단일 스레드로 IO 이벤트를 처리하였다.

        단일 스레드가 커널에 epoll 을 활용하여 IO 작업의 준비 완료 상태를 주기적으로 확인하였는데..

        (즉, Reactor, Selector 가 병목 지점인 것)

        Proactor 패턴에서는 AIO 로 동작하므로

        커널이 AIO 로 IO 작업의 준비 완료 상태를 알려 주기 때문에

        busy-wait 현상을 없앨 수 있다.

         

         

        사용 기술

        Proactor 패턴은 Java AIO를 사용한다.

         

        특징

        Java AIO 를 사용하기 때문에 비동기 non-blocking 으로 동작한다. (IO 관점)

         

        작동 방식

        I/O 작업이 시작될 때, 연산을 완료한 경우에 실행될 콜백을 등록한다.

        I/O 작업이 비동기적으로 수행되며, 작업 완료 시 해당 콜백을 자동으로 호출한다.

         

        대표 컴포넌트

        Proactor

        각 이벤트가 준비 완료 상태일 때 호출 될 Handler 를 콜백으로 등록한다.

        즉, Handler (Completion Handler) 는 비즈니스 로직이 된다.

         

        Java AIO 를 사용하면, AIO 자체적으로 스레드 풀을 관리한다.

        즉, 커널이 IO 작업 완료 이벤트를 AIO 로 알리면,

        AIO 는 가지고 있는 스레드 풀로 Completion Handler 를 호출한다.

        (구현 코드 상, 템플릿 콜백 패턴을 사용하게 됨)

         

         

        쉬운 이해를 위한 그림

        Reactor 패턴과 비슷하지만.. Application 에 busy-wait(loop) 가 없음을 생각해볼 수 있다.

         

         

        적용 사례

        Windows의 IOCP (Input/Output Completion Port) 를 사용한 시스템

         

         

        Reactor pattern 과 Proactor pattern

        Reactor 패턴은 주로 이벤트가 발생할 때까지 대기하고,

        발생한 이벤트에 대해 처리하는 NIO/Selector/epoll 기반의 모델을 위함이고

        Proactor 패턴은 I/O 작업 완료 시 자동으로 알림을 받는,

        완전한 비동기적인 AIO 기반의 모델을 위해 설계되었다.

         

        Reactor 패턴은 한정된 스레드에 좀더 적합하고..

        Proactor 패턴은 멀티 스레딩에 적합하다고 생각할 수 있다.

         

        두 패턴은 각각의 사용 사례와 성능 요구에 따라 선택될 수 있다.

         

        Proactor pattern 이 Reactor pattern 을 완전히 대체할 수 없는 이유

        1. OS 가 비동기 IO 를 지원하지 않는 경우가 있다.

        그러면 Java AIO 를 사용할 수 없다.

        또한 사용했다가 다른 OS 로 이식을 해야한다면.. 큰일남..

         

        2. 복잡성

        Proactor 에서는 callback, Future 를 사용해야하므로 코드의 복잡성이 올라간다.

        반면, Reactor 에서의 Event Loop 로 처리하므로 callback, Future 가 없음

         

        3. 개발자의 세밀한 제어

        Reactor 패턴에서는 Event loop 를 개발자가 직접 구현을하고 이벤트 처리 순서와 로직을 조정가능하다.

        반면, Proactor 패턴에서는 OS 와 AIO(라이브러리) 수준에서 비동기 작업이 완료되고 콜백이 호출되는 방식으로..

        개발자의 세밀한 조정이 어려울 수 있음..

        반응형

        'Spring Reactive Stack > Netty' 카테고리의 다른 글

        Netty 2  (0) 2024.01.21
        Netty 1  (0) 2024.01.17
        Reactor pattern  (0) 2023.11.19
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바