[C++] IOCP Core
·
Study/C++ & C#
여기서부턴 좀 더 제대로 흐름을 이해할 필요가 있는 것 같다. 아마 앞으로를 위해서도 중요할 것이다. 그런데 어떻게 정리해야 깔끔할지도 모르겠다. 그만큼 난이도가 올라간 것 같다. 1. 클래스 작성 일단 다시 Completion Port의 동작 과정에 대해 살펴보자. CP 핸들을 만든다 CP 핸들에 소켓을 등록한다 IO 함수를 건다 GetQueuedCompletionStatus()가 감지 일을 처리하고 다시 IO 함수를 건다 였다. CreateIoCompletionPort() 함수가 2가지 일을 한방에 처리하는 것은 정말 인상적이었다. 이제 이걸 하나의 작은 라이브러리의 형태로 구현해 보자. 1-1. IocpCore 이번 메모의 주제에 맞는 핵심 클래스이다. // IocpCore.h class IocpO..
[C++] Completion Port Model
·
Study/C++ & C#
대망의 IOCP. 이번에도 최대한 기억을 짜내서 메모해 보자. 1. Completion Model의 개념 Overlapped 모델을 생각해 보자. 이 모델 APC큐가 스레드마다 있었다. 따라서 어찌 보면 스레드가 낭비되는 느낌이 있었는데, IOCP는 그렇지 않다. APC큐가 스레드마다 있지 않고 딱 1개가 있다. 중앙에서 관리하는 APC큐라는 느낌으로 보면 딱 맞을 것이다. Alertable Wait 상태로 들어가기 위해 GetQueuedCompletionStatus()라는 함수를 사용해야 한다. 여기까지만 보면 Overlapped 모델과 흐름상의 큰 차이는 없지만, 결과적으로 IOCP는 스레드와의 궁합이 매우 좋기 때문에 매우 성능이 좋은 모델이라 할 수 있다. 1-1. 사용할 함수 CreateIoCo..