为什么叫重叠I / O?

我所能find的是关于如何使用Overlapped I / O的教程,但我找不到为什么这样调用。

是否因为例如我可以从套接字读取一些东西,然后读取其他东西之前必然第一次读取返回读取的字节?

我想这个想法是(20年前),你可以开始一个IO,执行一些计算或其他工作,然后等待结果。 今天很少这样做。 我认为这个想法来自selectpoll被认为是最先进的。

更好的名字是异步IO。 这就是其他平台似乎称之为的事情。 实际上MSDN文档混合了这两个术语。

其典型含义可以追溯到20世纪60年代(或者说ealier),其中重叠I / O意味着多个I / O传输(通常是每个I / O到不同设备)可能同时发生(如从磁带并发读取和写入到磁盘)。 另一个经典名称是并发I / O。 这可以通过类似于DMA的中断和/或硬件来完成(在那些日子里,一些DMA硬件实现更像是一组小型处理器)

IBM大型机的示例文章:

重叠的I / O – IBM

在Microsoft Windows中重叠操作意味着在其他任何操作系统语言中的异步操作。

坚持你的例子,你开始读一个套接字,不要等待成功,但做一些完全不同的东西(也许读不同的(!)套接字)。 然后询问第一个操作是否完成。 你也可以为它设置一个事件句柄。 或者给一个完成调用的CALLBACK函数。 在这种情况下,第一个调用“重叠”了其余的操作。

也看维基百科 。

我猜为什么微软被称为重叠的原因是,它不像开始一个线程,更像是一次开始一个异步任务,没有标准的名称。 它比std::thread更像std::async