- IOCP란?
- Windows 운영체제에서 고성능 비동기 I/O 처리를 위한 커널 객체
- 주로 네트워크 서버나 파일 I/O 처리에서 대량의 클라이언트를 효율적으로 처리하기 위해 사용됨
- 예시: C10K 문제(동시 만개 이상 연결 처리)를 해결할 수 있는 중요 기술
- 핵심 개념
- 비동기 I/O 기반: I/O 요청을 보내고 완료될 때까지 기다리는게 아닌, 완료되면 알림을 받아 쳐리
- 완료 포트(Completion Port): 비동기 작업이 완료되면, 해당 결과가 큐에 들어가고, 이 큐에서 결과 꺼내 처리
- 스레드 풀(Thread Pool): IOCP는 여러개의 스레드가 동시에 큐에서 I/O 완료 결과를 가져와 처리할 수 있도록 스레드 풀을 지원
- 동작 순서
- 완료 포트 생성 -> CreateIoCompletionPort()를 호출해 IOCP 객체 생성
- 소캣(또느 파일 핸들)과 포트 연결->수신용 소캣등 생성 후 해당 소캣을 IOCP와 연결
- 비동기 작업 요청 ->예)WSARecv(), WSASend()등 비동기 함수 호출->이때 OVERLAPPED 구조체 넘김
- 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 |