Асинхронность (компьютер программирование)

редактировать

Асинхронность в компьютерном программировании относится к возникновению событий, не зависящих от основного потока программы и способы борьбы с такими событиями. Это могут быть «внешние» события, такие как поступление сигналов , или действия, инициированные программой, которые выполняются одновременно с выполнением программы, без блокировки программы для ожидания результатов. Асинхронный ввод / вывод является примером последней причины асинхронности и позволяет программам отдавать команды запоминающим устройствам или сетевым устройствам, которые обслуживают эти запросы, в то время как процессор продолжает выполнение программы. Это обеспечивает степень параллелизма.

Обычный способ решения проблемы асинхронности в интерфейсе программирования - предоставить подпрограммы (методы, функции), которые возвращаются к их вызывающему. объект, иногда называемый будущим или обещанием, который представляет текущие события. Такой объект обычно сопровождается синхронизационной операцией, которая блокируется до завершения операции. Некоторые языки программирования, такие как Cilk, имеют специальный синтаксис для выражения вызова асинхронной процедуры.

Примеры асинхронности включают следующее:

  • вызов асинхронной процедуры, метод для запускать процедуру одновременно, облегченная альтернатива Threads.
  • "Ajax ", сокращение от" асинхронный JavaScript и XML ") представляет собой набор веб-разработка методы, использующие многие веб-технологии, используемые на стороне клиента для создания асинхронного ввода-вывода Веб-приложения.
  • Диспетчерские асинхронные методы (AMD), метод передачи данных используется, когда на стороне сервера необходимо обрабатывать большое количество длительных клиентских запросов. Используя синхронную диспетчеризацию метода (SMD), этот сценарий может перевести сервер в недоступное состояние занятости, что приведет к ответу на сбой подключения, вызванному сеть запрос на соединение тайм-аут. Обслуживание клиентского запроса немедленно отправляется доступному потоку из пул потоков , и клиент переводится в состояние блокировки. По завершении задачи сервер уведомляется обратным вызовом. Сервер разблокирует клиента и передает ответ клиенту. В случае нехватки потоков клиенты блокируются в ожидании доступности потоков.
Сценарии для Async

1. Операции ввода-вывода : Примеры: выполнение сетевого вызова, обращение к базе данных, чтение файла, печать документа и т. Д. Синхронная программа, выполняющая операцию ввода-вывода, остановится до тех пор, пока операция завершается. Более эффективная программа вместо этого выполнит операцию и продолжит выполнение другого кода, пока операция не завершена. Допустим, у вас есть программа, которая считывает данные, введенные пользователем, выполняет вычисления и затем отправляет результат по электронной почте. При отправке электронного письма вы должны отправить некоторые данные в сеть, а затем дождаться ответа принимающего сервера. Время, затрачиваемое на ожидание ответа сервера, - это потеря времени, которое было бы гораздо лучше использовать, если бы программа продолжала вычислять.

2. Параллельное выполнение нескольких операций : когда вам нужно выполнять разные операции параллельно, например, делать вызов базы данных, вызов веб-службы и любые вычисления, тогда мы можем использовать асинхронность.

3. Долгосрочные запросы, управляемые событиями: Это идея, когда у вас есть запрос, который поступает, и этот запрос на некоторое время засыпает, ожидая, когда произойдет какое-то другое событие, когда это событие произойдет, вы хотите, чтобы запрос продолжился, а затем отправил ответ клиенту. Таким образом, в этом случае, когда поступает запрос, этому запросу назначается поток, и когда запрос переходит в спящий режим, поток отправляется обратно в пул потоков, и по завершении задачи он генерирует событие и выбирает поток из пула потоков для отправка ответа (поток, отправленный и выбранный из пула потоков, может быть, а может и не быть одним и тем же.

См. также
Ссылки
Последняя правка сделана 2021-06-13 02:25:44
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте