gpt4 book ai didi

c++ - 为什么首选异步IO

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:45 26 4
gpt4 key购买 nike

所以我一直在进行一些 WIN32 套接字编程,并且我试图理解为什么 Overlapped 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;

优于像这样的普通 IO 调用

 recv(socket, dataBuf, bufLen), 0);

据我了解,如果 IO 事件未在 WSAWaitForMultipleEvents 完成,则第一个调用将阻塞,而第二个调用将直接在 recv 上阻塞,直到数据到达。那么稍晚一些的 IO 调用 block 的实际好处是什么?是不是如果您在等待之前有可以做的事情?

如果是这种情况,在数据到达之前您不能做任何事情的应用程序中是否值得/需要重叠 IO?

最佳答案

您展示的情况并不是使用任何类型的异步 I/O 的典型原因,我想说的恰恰相反(因为正如您所指出的,无论如何都不是真正的异步)。

使用异步 I/O 的典型原因仅仅是因为它是异步的,您的程序可以继续做其他事情而不是等待 I/O 操作完成。

关于c++ - 为什么首选异步IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com