为什么叫 Overlapped I/O?

Why is it called Overlapped I/O?

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

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

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

更好的名称是异步 IO。其他所有平台似乎都这么称呼它。 In fact the MSDN documentation mixes the two terms.

Overlap 在 Microsoft Windows 中的操作与其他 OS 语言中的 asynchron 没有任何区别。

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

另请参阅 wikipedia

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

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

IBM 大型机的示例文章:

Overlapped I/O - IBM