Асинхронний ввід/вивід

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Асинхронний або неблокуючий ввід/вивід - це форма обробки вводу/виводу, яка дозволяє виконувати інші процеси ще до того як закінчиться передавання даних.

Операції вводу/виводу на комп’ютері можуть бути надзвичайно повільними порівняно з обробкою даних. Пристрій вводу/виводу може містити механічні частини які повинні фізично переміщуватись, наприклад жорсткий диск, який шукає доріжку для запису чи читання. Це часто на порядки повільніше ніж перемикання електричного струму. Наприклад під час дискової операції що займає десять мілісекунд, процесор що має частоту в один гігагерц може виконати десять мільйонів циклів виконання інструкцій.

Простішим підходом до вводу/виводу є запитати доступ, і чекати на отримання даних. Але такий підхід (що називається синхронним, чи блокуючим) зупиняє роботу програми на час виконання вводу/виводу, призводячи що простоювання обчислювальних ресурсів. Коли програма робить багато операцій вводу/виводу, процесор майже ввесь свій час може проводити очікуючи на завершення виконання цих операцій.

Альтернативою є почати комунікацію, а потім виконати процеси що не потребують результатів її завершення. Цей підхід називають асинхронним вводом/виводом. Будь-яка задача що насправді залежить від результатів вводу-виводу все ще очікуватиме завершення комунікації, але інші процеси зможуть продовжувати роботу.

В операційних системах існує багато функцій на різних рівнях, призначених для реалізації асинхронного I/O. Насправді, у всіх, окрім найбільш рудиментальних операційних систем, головною функцією є забезпечення хоча б базових форм асинхронного I/O, хоча це може бути не надто видимим для користувача чи програміста. В найпростішому програмному рішенні, статус пристрою постійно опитується з певними інтервалами, щоб визначити чи готовий пристрій до наступної операції. (Наприклад CP/M працювала таким чином. Семантика її системних викликів не вимагала більш складної структури вводу/виводу, хоча більшість реалізацій були складнішими та ефективнішими). Прямий доступ до пам’яті може значно збільшити ефективність систем що базуються на опитуванні, а апаратні переривання можуть взагалі усунути потребу в опитуванні. Багатозадачні операційні системи можуть використовувати функціональність яка надається апаратними перериваннями, при цьому ховаючи складність обробки переривання від користувача. Spooling був першою формою багатозадачності створеної для експлуатації асинхронного вводу виводу.

Асинхронний ввід/вивід використовується для збільшення пропускної здатності, та швидкості реагування на події.

Форми[ред.ред. код]

Процес[ред.ред. код]

Опитування[ред.ред. код]

Цикли select(/poll)[ред.ред. код]

Сигнали (переривання)[ред.ред. код]

Функції зворотнього виклику[ред.ред. код]

Легковагові процеси чи потоки[ред.ред. код]

Черги/Порти завершення[ред.ред. код]

Прапорці подій[ред.ред. код]

Дивись також[ред.ред. код]

Посилання[ред.ред. код]