15

我能找到的只是有关如何使用重叠 I/O 的教程,但我找不到为什么会这样称呼它。

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

4

3 回答 3

14

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

IBM 大型机的示例文章:

重叠 I/O - IBM

于 2015-02-22T15:59:18.830 回答
8

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

更好的名称是异步 IO。其他所有平台似乎都这么称呼它。事实上,MSDN 文档混合了这两个术语。

于 2015-02-22T12:34:57.023 回答
5

Microsoft Windows 中的重叠操作与其他所有操作系统语言中的异步一样没有其他意义。

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

请参阅维基百科

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

于 2015-02-22T12:35:05.307 回答