Proactor
Proactor
  정황
    이벤트 드리븐 어플리케이션에서 여러개의 비동기적인 서비스 요청을 받고 처리한다.
  문제
    고가용성(Scalability)
      긴 처리시간이 걸리는 작업의 지연없이, 동시에 여러개의 완료 이벤트를 처리해야 한다.
    효율성(Efficiency)
      출력물을 최대화 한다.
      불필요한 3가지를 허용하지 않는다.
        1. 컨텍스트 스위칭(Context Switching)
        2. 동기화(Synchronization)
        3. CPU간 데이터 이동
    적응성(Adaptability)
      최소한의 노력으로 완료 이벤트를 추가하거나 향상 시킬 수 있어야 한다.
    프로그래밍 단순화(Programming simplicity)
      어플리케이션 코드는 다음 2가지로 부터 보호되어야 한다.
        멀티스레딩의 복잡도
        동기화 매커니즘
  해법
    2가지로 나누어서 해결한다.
      Long-duration operations(긴 시간이 걸리는 작업)
      Completion Handlers(완료 핸들러)
  구조
    Handle(핸들)
    Asynchronous Operations(비동기 작업)
    Completion Handler(완료 핸들러)
    Concreate Completion Handler(구체화된 완료 핸들러)
    Asynchronous Operation Processor(비동기 작업 처리기)
    Completion Event Queue(완료 이벤트 큐)
    Asynchronous Event Demultiplexer(비동기 이벤트 디멀티플렉서)
    Proactor
    Initiator(개시자)