Почему он называется перекрывающимся вводом / выводом?

Все, что я могу найти, — это учебные пособия о том, как использовать Overlapped I / O, но я не могу найти, почему он так называется.

Это потому, что, например, я могу что-то прочитать из сокета, а затем прочитать что-то еще, прежде чем обязательно первое чтение вернет прочитанные байты?

8

Решение

Я думаю, что идея (20 лет назад) состояла в том, что вы могли бы начать ввод-вывод, выполнить некоторые вычисления или другую работу, а затем дождаться результата. Это редко делается сегодня. Я думаю, что эта идея возникла в то время, когда select а также poll были признаны современными.

Лучшим именем будет асинхронный ввод-вывод. Это то, что каждая другая платформа, кажется, называет это. Фактически документация MSDN смешивает два термина.

6

Другие решения

Классическое значение восходит к 1960-м (или более раннему), где перекрывающийся ввод-вывод означал, что множественные передачи ввода-вывода (обычно каждый ввод-вывод на другое устройство) могут происходить одновременно (например, одновременное чтение с ленты и запись на диск). Альтернативным классическим названием для этого был параллельный ввод-вывод. Этого можно добиться с помощью прерываний и / или аппаратного обеспечения, аналогичного DMA (в те времена некоторые аппаратные реализации DMA были больше похожи на набор небольших процессоров)

Пример статьи для мэйнфрейма IBM:

Перекрытый ввод-вывод — IBM

7

перекрываться Работа в Microsoft Windows ничего не значит, как асинхронный на всех остальных OS-языке.

Следуя вашему примеру, вы запускаете чтение в сокете и не ждете успеха, а делаете что-то совершенно другое (возможно, читаете в другом (!) Сокете). Затем спросите, закончена ли первая операция.
Вы также можете установить дескриптор события для этого. Или дать CALLBACK функция, которая вызывается при завершении.
В этом случае первый вызов «перекрывает» остальные ваши операции.

Посмотри также на википедия.

Мое предположение, почему Microsoft называет это (было) наложением, состоит в том, что это не похоже на запуск потока, больше похоже на запуск асинхронной задачи в то время, когда для нее не было стандартного имени. Это больше похоже std::async чем std::thread,

1
По вопросам рекламы [email protected]