ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ACE(Adaptive Communication Environment)
    Platform/소켓 2010. 7. 20. 17:04
    다중 이벤트를 처리하기 위한 전통적인 방법 // 서버가 동시에 여러 네트워크 연결을 처리
        새로운 프로세스 또는 쓰레드를 생성하여 각각의 이벤트를 처리하는 방식

    디멀티플렉서(demultiplexer)에 기초한 Reactor 모델 // Event-driven
        select(), poll(), WaitForMultipleObjects()

        개발자의 비지니스 로직 부분을 이벤트 핸들링과 분리
            Reactor와 Event Handler

    Proactor pattern
        Demultiplexing이 socket event에 의해서 수행되는 점은 reactor pattern과 동일하다.
        Demultiplexing과정을 통해 분리된 메시지가 저장되는 Message queue를 가지고 있다.
        Message queue를 감시하는 스레드 풀을 가지고 있다.
        Message queue에 메시지가 저장되는 즉시 감시중이던 스레드가 메시지를 뽑아내어 적절한 메시지 핸들러를 호출하여 처리한다.
        Demultiplexing과 Message Handling 을 각각 다른 스레드풀에게 담당하도록 할 수 있으므로, 단순한 Reactor pattern보다 서버의 반응속도가 빨라진다.


    ACE_Svc_Handler -> ACE_Task
        .open() // virtual
        .handle_close() // virtual
        .handle_input() // virtual
        .handle_output() // virtual
       
    ACE_Acceptor -> ACE_Service_Object
        .open()

    ACE_Reactor
        .instance() // static
            .run_reactor_event_loop()
    ACE_Service_Handler -> ACE_Handler
        .open() // virtual
        .addresses()
        .handle_read_stream()
        .handle_write_stream()

    ACE_Asynch_Acceptor -> ACE_Handler
        .open()

    ACE_Proactor
        .instance() // static
            proactor_run_event_loop()

    참조 사이트:

Designed by Tistory.