Перекрывающийся ввод-вывод
Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Март 2010 г. ) |
Перекрывающийся ввод-вывод — это имя, используемое для асинхронного ввода-вывода в Windows API . Он был представлен как расширение API в Windows NT .
Использование перекрывающегося ввода-вывода требует передачи OVERLAPPED
структуру функций API, которые обычно блокируются, включая ReadFile()
, WriteFile()
и Винсока WSASend()
и WSARecv()
. Запрошенная операция инициируется вызовом функции, которая немедленно возвращает результат, и завершается ОС в фоновом режиме. Вызывающая сторона может дополнительно указать Win32 события дескриптор , который будет вызываться после завершения операции. Альтернативно, программа может получать уведомление о событии через порт завершения ввода-вывода , что является предпочтительным методом получения уведомления при использовании в симметричных многопроцессорных средах или при обработке ввода-вывода в многочисленных файлах или сокетах . Третий и последний способ получить уведомление о завершении ввода-вывода с перекрывающимся вводом-выводом — использовать ReadFileEx()
и WriteFileEx()
, которые позволяют предоставить подпрограмму User APC, которая будет запущена в том же потоке по завершении (User APC — это вещь, очень похожая на сигнал Unix/POSIX , с основным отличием в том, что сигналы используют номера сигналов из исторически сложившихся предопределенное перечисление, тогда как User APC может быть любой функцией, объявленной как " void f(void* context)
"). Так называемый перекрывающийся API имеет некоторые различия в зависимости от используемой версии Windows. [ 1 ]
Асинхронный ввод-вывод особенно полезен для сокетов и каналов .
Unix и Linux реализуют POSIX API асинхронного ввода-вывода (AIO).
Ссылки
[ редактировать ]- ^ «Ввод-вывод с перекрытием сокетов по сравнению с режимом блокировки/неблокирования» . Архивировано из оригинала 3 мая 2018 г.
Внешние ссылки
[ редактировать ]- Ссылка MSDN: ReadFile()
- Ссылка MSDN: WriteFile()
- Ссылка MSDN: Структура данных OVERLAPPED
- Порт завершения ввода-вывода