게임 개발/게임 서버 프로그래밍

Overlapped IO, IOCP

지노윈 2020. 7. 13. 10:00
반응형
  • Overlapped IO
    • WSASend, WSARecv, GetQueuedCompletionStatus 함수의 인자에 모두 Overlapped 구조체가 넘어 온다.
    • 왜 필요한가? 넌블러킹, 비동기 IO를 처리가기 위한 IO 방법이다.
    • 여러 IO가 중첩 되게 처리 한다고 해서 Overlapped라는 이름을 붙였다.
    • 또 다른 의미로는 작업과 IO가 동시에 진행된다는 의미
    • 장점
      • 넌블럭 IO
      • 버퍼핑 오버 헤드 감소 :  OS에 의해사용자가 지정한 버퍼에다 바로 read/write 한다.

 

  • IOCP(IO Completion Port)
    • 재사용이 가능한 쓰레드 풀 유지
    • 스마트한 워크 쓰레드 관리
    • 커널의 IO 쓰레드에 제어를 위임하여 IO 완료를 통보 받아 생성한 워커 쓰레드에서 로직 처리
    • 즉, 사용자는 IO Completion만을 기다려 처리.
    • Wating Thread Queue
      • LIFO 구조로 관리 합니다. 성능 이슈로 빈번히 호출 되는 쓰레드가 재사용 된다는 뜻입니다. 

 

  • Completion Key
    • Accept시 CreateCompletionPort 호출하여 소켓과 어떤 연결인지에 대한 정보(Completion Key)를 맵핑합니다.
    • 이후 GetQueuedCompletionStatus를 호출하여 IO Completion이 완료된 정보를 큐에서 가져옵니다.
    • 이때 누구로 부터 온 데이터인지를 Completion Key로 정의한 내용을 참조해서 알수 있습니다.