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