Асинхронный ввод-вывод: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 42:
 
Подход с ''Сигналfvb'', хотя и относительно прост в реализации в ОС, приводит в прикладной программе к нежелательному грузу по разработке, связанному с прерываниями ядра операционной системы. Его худшей характеристикой является то, что ''каждый'' блокирующий (синхронный) системный вызов потенциально прерываем; программист должен обычно задействовать повторяющийся код при каждом вызове. {{citation needed|date=November 2013}}
 
=== Функции обратного вызова ===
Доступны в [[Mac OS]] (предварительно - [[Mac OS X]]), [[OpenVMS|VMS]] и [[Microsoft Windows|Windows]]. Обладает многими характеристиками способа ''Сигналы'', так, как это принципиально одно и то же, хотя и редко признаются в качестве таковых. Разница в том, что каждый запрос ввода/вывода, как правило, может иметь свою собственную функцию завершения, в то время как система ''сигналов'' имеет одну функцию обратного вызова.
 
Потенциальная проблема в том, что глубина стека может расти неконтролируемо, поэтому чрезвычайно ключевая вещь, необходимо, только тогда запланировать другой ввод/вывод когда завершён предыдущий. Если это должно быть удовлетворено немедленно, первоначальный [[Callback_(программирование)|callback]] не выполняет «раскрутку» стека до того, как следующий вызывается. Системы для предотвращения этого (такие как "средний план" ('mid-ground') планирование следующей работы) повышают сложность и снизижают производительность. На практике, однако, это, как правило, не является проблемой, так как следующий ввод/вывод будет сам по себе, как правило, возвращается, как только следующий ввода/вывода запущен, позволяя стеку, быть «раскрученным». Проблема также не может быть предотвращена, путем избежания каких-либо дальнейших обратных вызовов, с помощью очереди, до первого возвращения обратного вызова.