본문 바로가기

IOCP 완료된 IO의 정보가 Completion Port 오브젝트라는 커널 오브젝트에 등록.그러나 그 전에 등록에 대한 요청 과정이 선행되어야 한다. -> 소켓과 CP 오브젝트와의 연결 요청 그러므로, IOCP 모델의 서버 구현을 위해서는1. Completion Port 오브젝트의 생성2. Completion Port 오브젝트와 소켓의 연결그리고 이것을 하나의 함수를 다르게 사용한다. -> CreateIoCompletionPort() 1)HANDLE hCpObject; hCpObject = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); // 함수의 마지막 인자는 CP 오브젝트에 할당되어 완료된 IO를 처리할 쓰레드의 수를 전달 // 0을 전달하면 시스템의.. 더보기
Overlapped IO - 중첩 IO 알림(notification)에 대한 비동기가 아니라, IO에 대한 비동기 IO의 중첩 - 하나의 쓰레드 내에서 동시에 둘 이상의 영역으로 데이터를 전송(또는 수신)함으로 인해서, 입출력이 중첩되는 상황- 호출된 입출력 함수가 바로 반환되어야 함- IO의 비동기가 핵심 Windows에서 말하는 Overlapped IO는 입출력만을 뜻하는 것이 아닌, 입출력의 완료를 확인하는 방법까지 포함한다. 1. Overlapped IO 소켓의 생성- WSASocket(), ioctlsocket(sock, FIONBIO, &mode)- Overlapped IO에 적합한 소켓을 생성 - 즉, Overlapped IO가 가능한 non-blocking 모드의 소켓 생성 2. Overlapped IO를 진행 - WSASend.. 더보기
Asynchronous Notification IO 모델 1 비동기(Asynchronous) Notification IO 모델 send() & recv() - 동기화 함수 -> 동기화 입출력을 진행-> 함수의 호출 및 반환시점과 데이터의 송수신 시작 및 완료시점이 동기화가 된다고 이야기한다.-> send(recv) 함수가 호출되는 순간부터 데이터의 전송(수신)이 시작되고, send(recv) 함수의 호출이 완료(반환)되는 순간 데이터의 전송(수신)이 완료된다. 비동기화 함수 -> 비동기화 입출력을 진행 비동기화 입출력 : 입출력 함수의 반환시점과 데이터의 송수신의 완료시점이 일치 하지 않는 것 동기화 된 입출력의 단점?- 입출력이 진행되는 동안 호출된 함수가 반환을 하지 않으니, 다른 일을 할 수가 없다.- 그러므로, 비동기 방식은 동기화 방식보다 효율적으로 .. 더보기