Асинхронность (компьютерное программирование)
Асинхронность в компьютерном программировании означает возникновение событий, независимых от основного потока программы , и способы борьбы с такими событиями. Это могут быть «внешние» события, такие как поступление сигналов , или действия, инициируемые программой, которые происходят одновременно программы с выполнением программы, без зависания в ожидании результатов. [1] Асинхронный ввод-вывод является примером последнего случая асинхронности и позволяет программам выдавать команды запоминающим или сетевым устройствам, которые обслуживают эти запросы, в то время как процессор продолжает выполнять программу. Это обеспечивает определенную степень параллелизма . [1]
Распространенный способ борьбы с асинхронностью в программном интерфейсе — предоставить подпрограммы , которые возвращают будущее или обещание , представляющее текущую операцию, а также операцию синхронизации, которая блокируется до тех пор, пока будущее или обещание не будет завершено. Некоторые языки программирования, такие как Cilk , имеют специальный синтаксис для выражения асинхронного вызова процедуры. [2]
Примеры асинхронности включают следующее:
- Асинхронный вызов процедуры , метод одновременного запуска процедуры, облегченная альтернатива потокам .
- Ajax — это набор клиентских веб-технологий, используемых клиентом для создания веб-приложений асинхронного ввода-вывода .
- Асинхронная диспетчеризация метода (AMD) — метод передачи данных, используемый, когда серверной стороне необходимо обрабатывать большое количество длительных клиентских запросов. [3] Используя синхронную диспетчеризацию методов (SMD), этот сценарий может перевести сервер в состояние недоступности занятости, что приведет к ответу об ошибке соединения, вызванному сетевого запроса тайм-аутом подключения . Обработка клиентского запроса немедленно передается доступному потоку из пула потоков , и клиент переводится в состояние блокировки. По завершении задачи сервер уведомляется обратным вызовом. Сервер разблокирует клиента и передает ответ обратно клиенту. В случае истощения потоков клиенты блокируются, ожидая, пока потоки станут доступными.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Дэвис, Алекс (2012). Асинхронность в C# 5.0 . О'Рейли. стр. 1–2. ISBN 9781449337124 .
- ^ МакКул, Майкл; Рейндерс, Джеймс; Робисон, Арч (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Эльзевир. п. 30.
- ^ Использование AMD в ICE .