我所能找到的是有关如何使用重叠I / O的教程,但我无法找到为什么会这样调用。
是否因为例如我可以从套接字读取内容,然后在第一次读取返回读取的字节之前读取其他内容?
答案 0 :(得分:7)
我认为这个想法是(20年前)你可以启动IO,执行一些计算或其他工作,然后等待结果。今天很少这样做。我认为这个想法来自于select
和poll
被认为是最先进的时期。
更好的名称是异步IO。这是所有其他平台似乎都称之为的东西。 In fact the MSDN documentation mixes the two terms.
答案 1 :(得分:7)
经典意义可以追溯到20世纪60年代(或更早期),其中重叠的I / O意味着可以同时发生多个I / O传输(通常每个I / O到不同的设备)(如同时从磁带和写入磁盘)。另一个经典名称是并发I / O.这可以通过类似于DMA的中断和/或硬件来实现(在那些日子里,一些DMA硬件实现更像是一组小型处理器)
IBM大型机的示例文章:
答案 2 :(得分:1)
重叠操作在其他所有操作系统语言中均不代表 asynchron 。
坚持你的例子,你开始读取套接字,不要等待成功但做一些完全不同的事情(也许在不同的(!)套接字上读取)。然后询问第一个操作是否完成。
您还可以为此设置事件句柄。或者给出一个在完成时调用的CALLBACK
函数。
在这种情况下,第一个电话"重叠"其余的操作。
另见wikipedia。
我猜微软为什么称它重叠是因为它不像启动一个线程,更像是在没有标准名称的情况下启动异步任务。它更像std::async
而不是std::thread
。