그래서 몇 가지 WIN32 소켓 프로그래밍을 해왔고 오버랩 IO가 선호되는 이유를 이해하려고합니다. 입출력 이벤트가하지 않았다 경우 특히, 나는이왜 비동기 IO를 선호합니까?
if (WSARecv(
socket,
dataBuf,
1,
NULL,
&flags,
&ov,
NULL)
== SOCKET_ERROR) {
if (WSAGetLastError() == WSA_IO_PENDING)
{
if (WSAWaitForMultipleEvents(1, &ov.hEvent, FALSE, INFINITE, FALSE) == WAIT_TIMEOUT)
{
return FALSE;
}
} else {
return FALSE;
}
}
// ... more code here
return TRUE;
같은 내 이해에서이
recv(socket, dataBuf, bufLen), 0);
같은 일반 IO 호출을 선호하는 이유 궁금 해서요, 첫 번째 통화는 차단됩니다 WSAWaitForMultipleEvents에서 완료되는 반면, 두 번째 호출은 데이터가 도착할 때까지 recv에서 직접 차단됩니다. 따라서 IO 호출이 약간 나중에 차단되는 실제 이점은 무엇입니까? 그것입니까? IF 당신이 그것을하기를 기다리기 전에 할 수있는 일이 있습니까?
데이터가 도착할 때까지 아무 것도 할 수없는 애플리케이션에서 가치가있는 겹쳐진 IO가 필요한 경우입니까?
데이터를 기다리는 동안 수행 할 수있는 방법을 보여줄 수 있습니까? – FrozenHawk
표준 예제는 하나 이상의 서버 (예 : 서버)가있는 응용 프로그램입니다. 각 클라이언트에 대해 하나의 스레드 만 가질 수 있습니다.이 스레드는 간단하지만 확장 성이 좋지 않거나 비동기 I/O를 사용할 수 있습니다. –
정식 응용 프로그램은 GUI 응용 프로그램이라고 생각했을 것입니다. 사용자 입력 및 시스템 다시 그리기 호출에 응답하여 응답하지 않게해야합니다. –