为什么称为重叠I / O?

时间:2015-02-22 12:30:35

标签: c++ windows sockets terminology overlapped-io

我所能找到的是有关如何使用重叠I / O的教程,但我无法找到为什么会这样调用。

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

3 个答案:

答案 0 :(得分:7)

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

更好的名称是异步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大型机的示例文章:

Overlapped I/O - IBM

答案 2 :(得分:1)

Microsoft Windows中的

重叠操作在其他所有操作系统语言中均不代表 asynchron

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

另见wikipedia

我猜微软为什么称它重叠是因为它不像启动一个线程,更像是在没有标准名称的情况下启动异步任务。它更像std::async而不是std::thread