목록Game Dev/Game Server (3)
KoreanFoodie's Study

Asio 는 Asynchronous IO 의 약자이다. Asio 를 이해하기 위해서는, 다음과 같은 용어들을 알고 있어야 한다. IO Service 클래스 : 커널에서 발생한 입출력 이벤트를 디스패치 해주는 기능을 수행. 디스패치란, 우선순위가 높은 작업이 우선적으로 수행될 수 있도록 시스템 자원을 할당하는 것을 의미한다. IO Service 클래스는 커널에서 발생한 네트워크상의 접속 및 데이터 처리 이벤트를 처리한다. 종단점(Endpoint) : 네트워크 상의 특정 컴퓨터에서 실행되고 있는 하나의 프로그램. 구체적으로 IP 주소와 포트 번호의 한 쌍을 종단점이라고 함. DNS(Domain Name Server) : Boost Asio 에서는 도메인 주소를 이용, IP 주소를 알아내어 종단점을 구한다. ..

IOCP는 CPU 개수만큼만 쓰레드를 쓰는 서버이다. IOCP 를 사용한 모든 Send/Recv 는 Overlapped I/O 로 동작한다. 멀티쓰레드에서 동작하며, 콜백함수들을 동시에 동작해서 성능을 높인다. IOCP가 사용하는 IOCP 객체는 커널 안에서 관리된다. 커널 내에는 DEVICE LIST 라는 자료구조가 존재하는데, 소켓을 IOCP 에 등록하면 IOCP 객체는 DEVICE_LIST 에 소켓들을 등록해서 처리한다. 프로그래머는 DEVICE_LIST 를 직접 보거나 제어할 수 없다. 흐름을 다음과 같이 요약해 볼 수 있을 것 같다 : I/O 디바이스(소켓, FD) IOCP 에 등록 : CreateIoCompletionPrt 함수를 통해 디바이스와 CompletionPort(이하 CP) 를 바인..

먼저 Message Pump 란, 한 메시지를 처리하는 도중 메시지 큐로부터 다른 메시지를 꺼내 이를 처리하는 코드를 의미한다. 윈도우 어플리케이션의 경우, UI 및 사용자 입력 처리하는 과정에서 메시지 펌프를 적극 활용하고 있다. 기초적인 Message Loop 코드는 다음과 같다. MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } 그런데 GetMessage 의 경우 데드타임(메시지큐에 메시지가 없어 GetMessage 가 놀고 있는 시간)을 제대로 활용할 수 없어, PeekMessage 를 많이 활용한다. PeekMessage 는 메시지 큐에 메시지가 있든 없든 리턴을 하기 때문..