Асинхронность в программировании компьютеров относится к возникновению событий, независимых от основного потока программы , и способам обработки таких событий. Это могут быть «внешние» события, такие как поступление сигналов или действия, инициированные программой, которые происходят одновременно с выполнением программы, без зависания программы в ожидании результатов. [1] Асинхронный ввод/вывод является примером последнего случая асинхронности и позволяет программам выдавать команды устройствам хранения или сетевым устройствам, которые обслуживают эти запросы, в то время как процессор продолжает выполнять программу. Это обеспечивает определенную степень параллелизма . [1]
Обычный способ борьбы с асинхронностью в программном интерфейсе — предоставить подпрограммы , которые возвращают future или promise , представляющие текущую операцию, и синхронизирующую операцию, которая блокирует , пока future или promise не будет завершен. Некоторые языки программирования, такие как Cilk , имеют специальный синтаксис для выражения асинхронного вызова процедуры. [2]
Асинхронная диспетчеризация методов (AMD), метод передачи данных, используемый, когда серверной стороне необходимо обрабатывать большое количество длительных клиентских запросов. [3] При использовании синхронной диспетчеризации методов (SMD) этот сценарий может перевести сервер в недоступное занятое состояние, что приведет к ответу об ошибке соединения, вызванному истечением времени ожидания запроса на сетевое соединение . Обслуживание клиентского запроса немедленно направляется доступному потоку из пула потоков , и клиент переводится в состояние блокировки. После завершения задачи сервер уведомляется обратным вызовом. Сервер разблокирует клиента и передает ответ обратно клиенту. В случае нехватки потоков клиенты блокируются, ожидая, пока потоки станут доступны.