Все, что я могу найти, — это учебные пособия о том, как использовать Overlapped I / O, но я не могу найти, почему он так называется.
Это потому, что, например, я могу что-то прочитать из сокета, а затем прочитать что-то еще, прежде чем обязательно первое чтение вернет прочитанные байты?
Я думаю, что идея (20 лет назад) состояла в том, что вы могли бы начать ввод-вывод, выполнить некоторые вычисления или другую работу, а затем дождаться результата. Это редко делается сегодня. Я думаю, что эта идея возникла в то время, когда select
а также poll
были признаны современными.
Лучшим именем будет асинхронный ввод-вывод. Это то, что каждая другая платформа, кажется, называет это. Фактически документация MSDN смешивает два термина.
Классическое значение восходит к 1960-м (или более раннему), где перекрывающийся ввод-вывод означал, что множественные передачи ввода-вывода (обычно каждый ввод-вывод на другое устройство) могут происходить одновременно (например, одновременное чтение с ленты и запись на диск). Альтернативным классическим названием для этого был параллельный ввод-вывод. Этого можно добиться с помощью прерываний и / или аппаратного обеспечения, аналогичного DMA (в те времена некоторые аппаратные реализации DMA были больше похожи на набор небольших процессоров)
Пример статьи для мэйнфрейма IBM:
перекрываться Работа в Microsoft Windows ничего не значит, как асинхронный на всех остальных OS-языке.
Следуя вашему примеру, вы запускаете чтение в сокете и не ждете успеха, а делаете что-то совершенно другое (возможно, читаете в другом (!) Сокете). Затем спросите, закончена ли первая операция.
Вы также можете установить дескриптор события для этого. Или дать CALLBACK
функция, которая вызывается при завершении.
В этом случае первый вызов «перекрывает» остальные ваши операции.
Посмотри также на википедия.
Мое предположение, почему Microsoft называет это (было) наложением, состоит в том, что это не похоже на запуск потока, больше похоже на запуск асинхронной задачи в то время, когда для нее не было стандартного имени. Это больше похоже std::async
чем std::thread
,