IOCP

gksrudtlr
|2025. 4. 4. 21:33
  • IOCP란?
    • Windows 운영체제에서 고성능 비동기 I/O 처리를 위한 커널 객체
    • 주로 네트워크 서버나 파일 I/O 처리에서 대량의 클라이언트를 효율적으로 처리하기 위해 사용됨
    • 예시: C10K 문제(동시 만개 이상 연결 처리)를 해결할 수 있는 중요 기술
  • 핵심 개념
    • 비동기 I/O 기반: I/O 요청을 보내고 완료될 때까지 기다리는게 아닌, 완료되면 알림을 받아 쳐리
    • 완료 포트(Completion Port): 비동기 작업이 완료되면, 해당 결과가 큐에 들어가고, 이 큐에서 결과 꺼내 처리
    • 스레드 풀(Thread Pool): IOCP는 여러개의 스레드가 동시에 큐에서 I/O 완료 결과를 가져와 처리할 수 있도록 스레드 풀을 지원
  • 동작 순서
    1. 완료 포트 생성 -> CreateIoCompletionPort()를 호출해 IOCP 객체 생성
    2. 소캣(또느 파일 핸들)과 포트 연결->수신용 소캣등 생성 후 해당 소캣을 IOCP와 연결
    3. 비동기 작업 요청 ->예)WSARecv(), WSASend()등 비동기 함수 호출->이때 OVERLAPPED 구조체 넘김
    4. GetQueuedCompletionStatus()로 완료 통지 확인->이 함수는 IOCP 큐에서 완료된 작업 꺼내 처리
  • 장점
장점 설명
높은 확장성 수천~수만 개의 연결도 적은 수의 스레드로 처리 가능
커널 수준 큐잉 커널이 직접 큐를 관리하므로 효율적
낮은CPU 사용률 유휴 스레드는 블로킹되어 대기하므로 자원 낭비 없음
스레드 풀 자동 조절 IOCP가 적절한 스레드 수를 조절 가능

 

  • 중요한 이유
    • 리눅스의 epoll, macOS의 kqueue에 대응되는 Windows의 비동기 I/O 방식
    • MMORPG, 채팅 서버, 대규모 앱 서버 등에서 필수 기능 중 하나
    • 커널 수준에서 동작하므로 일반적인 select, poll보다 훨씬 성능이 좋음

'오늘의 키워드' 카테고리의 다른 글

CCD IK  (0) 2025.04.07
삼각수와 역함수  (0) 2025.04.02
Spline Interpolation  (1) 2025.03.26
Easing  (0) 2025.03.24
캐시 미스  (0) 2025.03.20