1. IO Completion Port
- 내부에 큐를 생성하여 입출력이 완료되면 Completion Packet 생성하여 Completion Queue에 저장
- 스레드는 Completion Queue 에서 패킷을 하나씩 가져와 처리
2. IOCP
- 비동기 입출력 모델( 먼저 입출력한 후 나중에 확인 )
- 제한된 스레드를 사용하여 컨텍스트 스위칭 시간 절약
3. IOCP 구현
- Completion Port 오브젝트 생성 (소켓과 오브젝트 연결)
HANDLE CreateIoCompletionPort()
서버의 리슨 소켓 / 각 클라이언트의 소켓이 생성될 때 오브젝트 생성
- 보통 CPU 의 2배수로 WorkerThread 생성
루프를 돌면서 Completion Queue 를 계속 호출
- Completion Queue 의 Completion Packet 확인
발생한 IO를 가져오기
BOOL GetQueuedCompletionStatus()
Overlapped 구조체를 통해 IO_READ / IO_WRITE 를 구분
- 내부에 큐를 생성하여 입출력이 완료되면 Completion Packet 생성하여 Completion Queue에 저장
- 스레드는 Completion Queue 에서 패킷을 하나씩 가져와 처리
2. IOCP
- 비동기 입출력 모델( 먼저 입출력한 후 나중에 확인 )
- 제한된 스레드를 사용하여 컨텍스트 스위칭 시간 절약
3. IOCP 구현
- Completion Port 오브젝트 생성 (소켓과 오브젝트 연결)
HANDLE CreateIoCompletionPort()
서버의 리슨 소켓 / 각 클라이언트의 소켓이 생성될 때 오브젝트 생성
- 보통 CPU 의 2배수로 WorkerThread 생성
루프를 돌면서 Completion Queue 를 계속 호출
- Completion Queue 의 Completion Packet 확인
발생한 IO를 가져오기
BOOL GetQueuedCompletionStatus()
Overlapped 구조체를 통해 IO_READ / IO_WRITE 를 구분
'Computer > ServerProgramming' 카테고리의 다른 글
소켓 I/O :: 비교 (0) | 2010.02.22 |
---|---|
소켓 I/O :: Overlapped Callback (0) | 2010.02.22 |
소켓 I/O :: WSAEventSelect (0) | 2010.02.22 |
소켓 I/O :: WSAAsyncSelect (0) | 2010.02.22 |
소켓 I/O :: Select (0) | 2010.02.22 |