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