为什么称为重叠I/O?

10 c++ sockets windows terminology overlapped-io

我能找到的就是如何使用Overlapped I/O的教程,但是我找不到为什么会这样调用它.

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

usr*_*usr 7

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

更好的名称是异步IO.这就是每个其他平台似乎都称之为的东西.事实上,MSDN文档混合了这两个术语.


rcg*_*ldr 7

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

IBM大型机的示例文章:

重叠的I/O - IBM


Mar*_*ott 5

Microsoft Windows 中的重叠操作与其他所有操作系统语言中的异步无关。

为了坚持您的示例,您开始读取套接字并且不等待成功而是执行完全不同的操作(可能在不同的(!)套接字上读取)。然后询问第一次操作是否完成。您还可以为此设置事件句柄。或者给出一个CALLBACK在完成时调用的函数。在这种情况下,第一个调用“重叠”了其余的操作。

也看看维基百科

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