120 likes | 423 Views
TCP/IP Socket Programming…. 제 22 장 Completion Port 입 · 출력 모델. Network Lab. Yong bae, Kim. 목차. Completion Port 입 · 출력 기본 원리 Completion Port 입 · 출력을 위한 기본 단계 Completion Port 입 · 출력 기반의 서버 구현. 구현. C 1. 소 켓. Completion Port 오브젝트 생성함수. 연결. 연결. 확인. Thread. Completion Port. C 2.
E N D
TCP/IP Socket Programming… 제 22장 Completion Port 입·출력 모델 Network Lab. Yong bae, Kim
목차 • Completion Port 입·출력 기본 원리 • Completion Port 입·출력을 위한 기본 단계 • Completion Port 입·출력 기반의 서버 구현
구현 C 1 소 켓 Completion Port 오브젝트 생성함수 연결 연결 확인 Thread Completion Port C 2 소 켓 Completion Queue에 삽입 연결 확인에 필요한 함수 c.p C 3 소 켓 Completion Queue 소켓과의 연결함수.
IOCP란? • 기본적으로 비동기 입출력 모델이다(Overlapped IO). • 제한된 쓰레드의 수를 통해서, 여러 소켓의 입출력을 담당하게 한다. • 컨텍스트 스위칭에 소비되는 시간을 줄이는 모델이다. • Overlapped 입출력 모델의 특징과 비동기 Notification 입출력 모델의 특징을 동시에 지닌다(단 비동기 Notification 입출력 모델과는 적용 시점에 차이가 있다).
CreateIoCompletionPort 함수 • Completion Port 오브젝트 생성 HANDLE CreateIoCompletionPort ( HANDLE FileHandle, // 연결 시킬 소켓 핸들 HANDLE ExistingCompletionPort, // 연결 시킬 completion port 핸들 ULONG_PTR CompletionKey, // completion key DWORD NumberOfConcurrentThreads // 동시 실행 가능한 쓰레드의 수 ); 만약에 0을 전달 할 경우 CPU의 수만큼 허용한다.
적절한 쓰레드의 수 • Response Session이 짧은 경우. : CPU의 개수를 초과하지 않는다. • Response Session이 긴 경우. : CPU의 개수를 적절히 초과하여 클라이언트의 평균 만족도를 높인다 • 일반적인 경우.: CPU의 개수를 초과하지 않는다.
CreateIoCompletionPort 함수 • Overlapped 소켓과 Completion Port의 연결 HANDLE CreateIoCompletionPort ( HANDLE FileHandle, // 연결 시킬 소켓 핸들 HANDLE ExistingCompletionPort, // 연결 시킬 completion port 핸들 ULONG_PTR CompletionKey, // completion key DWORD NumberOfConcurrentThreads// 동시 실행 가능한 쓰레드의 수 ); Completion Packet에 저장되는 Data
GetQueuedCompletionStatus 함수 • Completion Queue에 들어 있는 패킷 정보 확인 BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, // handle to completion port LPDWORD lpNumberOfBytes, // bytes transferred PULONG_PTR lpCompletionKey, // file completion key LPOVERLAPPED*lpOverlapped, // buffer DWORD dwMilliseconds // optional timeout value );
CreateIoCompletionPort : key [그림 22-1] 함수 호출과 전달 인자의 관계
WSARecv : overlapped [그림 22-2] 구조체의 포인터 관계
참고문헌 • “데이터 통신과 네트워킹”, 이재광 외 2명, 교보문고 • “TCP/IP 프로토콜”, 이재광외 5명, 미래컴 • “Linux Socket Programming by Example”, Warren W. Gay, QUE '00