Асинхронный ввод-вывод


В информатике асинхронный ввод/вывод является формой неблокирующей обработки ввода/вывода, который позволяет процессу продолжить выполнение, не дожидаясь окончания передачи данных.

Входные и выходные (I/O) операции на компьютере могут быть весьма медленными, по сравнению с обработкой данных. Устройство ввода/вывода может быть на несколько порядков медленнее, чем оперативная память. Например, во время дисковой операции, которой требуется десять миллисекунд для выполнения, процессор, который работает на частоте один гигагерц, может выполнить десять миллионов циклов команд обработки.

Выгодным отличием неблокирующего ввода-вывода является эффективное использование ресурсов процессора. Например, в приложениях с графическим интерфейсом классический блокирующий ввод-вывод может заблокировать цикл событий при долгой операции и сделать приложение неотзывчивым к взаимодействию с пользователем, так как блокируется весь поток выполнения, в котором и выполняется цикл событий. Также неблокирующий ввод-вывод применяется в сетевых приложениях, где необходимо одновременно обслуживать несколько клиентов в одном потоке (процессе) выполнения. При блокирующем подходе всего лишь один «медленный» клиент замедлял бы весь поток.

Так в чём же отличие асинхронного от синхронного подхода к неблокирующему вводу-выводу? Во втором случае блокировка избегается проверкой на наличие входящих данных или возможность записи исходящих данных. В асинхронном подходе проверка не требуется. Название асинхронный означает, что мы «теряем» контроль над порядком операций ввода-вывода. Порядок определяет операционная система, которая выстраивает операции, исходя из готовности устройств ввода-вывода.[1]