epoll , iocp, asio 를 살펴볼때 이해하고 넘어가야할 중요 패턴
Reactor :
reactor 패턴의 경우 이벤트가 발생했을 때의 event handler 의 등록을 통해 reactor 가 해당 이벤트 핸들러에게 매 이벤트 마다의 이벤트 작업을 하도록 한다
일반적인 이벤트 핸들러 패턴이라고 볼 수 있다
proactor:
class diagram 보다 더 확실히 이해하기 쉬운내용으로
https://en.wikipedia.org/wiki/Proactor_pattern
wikipedia 의 sequence diagram
이미 할건 한다 – 단 async 하게
icop 를 기준으로 설명하자면 이미 등록된 핸들에 대한 입출력은 일어나게 둔다 다만 해당 입출력이 완료된 시점에 completion dispatch 가 발생할 수 있도록 도와준다
실제 iocp 에서는 GetQueuedCompletionStatus 를 통해서 completion dispatch 가 필요한(할 수 있는) 상태 인지를 completion queue 를 통해 확인하고 해당 완료된 io 에 대한 후속 처리를 하도록 한다
실제 io 자체는 이미 병렬로 일어나게 두며 해당 일어난 이후 이벤트 핸들링을 하는게 reactor 와 크게 다른점 으로 이해 하면 된다
https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/overview/core/async.html
boost asio 의 proactor pattern 에 대한설명 페이지를 보면 아래와 같은 설명으로 되어 있다
해당 페이지의 설명을 보면 epoll 과 iocp 에서의 asio 구현의 각부분의 차이를 이해할 수 있다
사실 reactor 의 경우 별다른 특징없는 이벤트 핸들러 패턴이라고 이해해도 좋으며
해당 reactor 패턴을 사용 했을때의 한계나 단점을 극복하고 더 효율적으로 이벤트 핸들링/io 가 일어 나고 핸들링 될 수 있도록 하기위한 방법을 proactor 라고 이해하면 될듯 하다
asynchronous operation 과 해당 완료에 파생한 이벤트 핸들링을 나누어 처리할 수 있을때
댓글 남기기