Асинхронность (компьютерное программирование) - Википедия - Asynchrony (computer programming)

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

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

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

  • Асинхронный вызов процедуры, метод для одновременного запуска процедуры, легкая альтернатива Потоки.
  • "Аякс ", сокращение от" асинхронный " JavaScript и XML ")[3][4][5] это набор Веб-разработка методы, использующие многие веб-технологии, используемые на сторона клиента для создания асинхронного ввода-вывода Веб-приложения.
  • Отправка асинхронного метода (AMD), метод передачи данных, используемый, когда серверная сторона должна обрабатывать большое количество длительных клиентских запросов.[6] При использовании диспетчеризации синхронного метода (SMD) этот сценарий может перевести сервер в недоступное состояние занятости, что приведет к ответу на сбой подключения, вызванному сеть запрос на подключение тайм-аут. Обработка клиентского запроса немедленно отправляется доступному нить из пул потоков и клиент переводится в состояние блокировки. По завершении задачи сервер уведомляется обратным вызовом. Сервер разблокирует клиента и передает ответ клиенту. В случае нехватки потоков клиенты блокируются в ожидании доступности потоков.

Сценарии для async

  1. Операции ввода / вывода: Примеры: выполнение сетевого вызова, обращение к базе данных, чтение файла, печать документа и т. Д. Синхронная программа, выполняющая операцию ввода-вывода, будет остановлена ​​до завершения операции. Более эффективная программа вместо этого выполнит операцию и продолжит выполнение другого кода, пока операция не завершена. Предположим, у вас есть программа, которая считывает ввод данных пользователем, производит вычисления и затем отправляет результат по электронной почте. При отправке электронного письма вы должны отправить некоторые данные в сеть, а затем дождитесь ответа принимающего сервера. Время, затрачиваемое на ожидание ответа сервера, - это потеря времени, которое было бы гораздо лучше использовать, если бы программа продолжала вычислять.
  2. Параллельное выполнение нескольких операций: Когда вам нужно выполнить разные операции параллельно, например, сделать вызов базы данных, вызов веб-службы и любые вычисления, тогда мы можем использовать асинхронность.
  3. Длительные запросы, управляемые событиями: Это идея, когда у вас есть запрос, который поступает, и запрос засыпает на некоторое время, ожидая, когда произойдет какое-то другое событие, когда это событие произойдет, вы хотите, чтобы запрос продолжился, а затем отправил ответ клиенту. Таким образом, в этом случае, когда поступает запрос, этому запросу назначается поток, и когда запрос переходит в спящий режим, поток отправляется обратно в пул потоков, и по завершении задачи он генерирует событие и выбирает поток из пула потоков для отправка ответа (поток, отправленный и выбранный из пула потоков, может быть, а может и не совпадать.[7]

Смотрите также

Рекомендации

  1. ^ а б Дэвис, Алекс (2012). Асинхронный режим в C # 5.0. О'Рейли. С. 1–2.
  2. ^ МакКул, Майкл; Рейндерс, Джеймс; Робисон, Арка (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений. Эльзевир. п. 30.
  3. ^ Крис Шифлетт. «Аякс - это не аббревиатура».
  4. ^ «AJAX vs Ajax - конечно же, Ajax! (Арун Гупта, осталось много миль ...)».
  5. ^ Джесси Джеймс Гарретт (18 февраля 2005 г.). «Ajax: новый подход к веб-приложениям». AdaptivePath.com. Получено 19 июн 2008.
  6. ^ ICE использование AMD.
  7. ^ Гоэль, Гаурав. "Учебное пособие по асинхронности и ожиданию". Код проекта. Получено 3 марта, 2020.