我只能找到关于如何使用重叠I/O的教程,但我找不到为什么它被称为重叠I/O。
这是因为例如我可以从套接字中读取一些内容,然后在第一个读取返回读取的字节数之前读取其他内容吗?
我只能找到关于如何使用重叠I/O的教程,但我找不到为什么它被称为重叠I/O。
这是因为例如我可以从套接字中读取一些内容,然后在第一个读取返回读取的字节数之前读取其他内容吗?
经典意义上的 Overlapped I/O 追溯到 1960 年代(或更早)。它指的是多个 I/O 转移(通常是每个 I/O 到不同设备)可以同时进行(比如从磁带并发读取和写入到磁盘)。另一个经典名称是 Concurrent I/O。这可以通过中断和/或类似 DMA 的硬件实现(在那些日子里,一些 DMA 硬件实现更像一组小型处理器)来完成。
IBM 主机的示例文章:
我认为20年前的想法是,你可以开始一个IO,执行一些计算或其他工作,然后等待结果。今天很少这样做。我认为这个想法来自于一个时代,当时select
和poll
被认为是最先进的技术。
更好的名称应该是异步IO。这是其他所有平台似乎都这么称呼它。事实上,MSDN文档混淆了这两个术语。
select
和poll
已经过时了吗? - RichOverlap操作在Microsoft Windows中的意思与其他操作系统语言中的异步(asynchron)操作没有任何区别。
以您的例子为例,您启动了一个套接字的读取操作,并不等待成功,而是做完全不同的事情(也许在另一个套接字上进行读取)。然后询问第一个操作是否完成。您也可以为此设置事件处理程序或提供CALLBACK
函数,在完成时调用该函数。在这种情况下,第一次调用“重叠”了您其余的操作。
还可以参考wikipedia。
我猜Microsoft之所以称其为“重叠”,是因为它不像启动线程那样,更像在没有标准名称的情况下启动异步任务。它更像std::async
而不是std::thread
。