асинхронный

Не совпадают по времени.

прилагательное не одновременно; не совпадают по времени; - в отличие от синхронного.

В этой статье мы рассмотрим, как асинхронность в JavaScript похожа на заказ кофе в очереди Starbucks.

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

Когда веб-приложения запускают блок кода, сохраняя контроль над браузером со стороны пользователя, это называется «блокировкой». JavaScript ведет себя так, потому что он «однопоточный».

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

JavaScript органично однопоточен. Даже при наличии нескольких ядер на ранних этапах JavaScript выполнял задачи только в одном потоке, основном потоке. Со временем JavaScript развился, чтобы обеспечить возможность одновременного выполнения нескольких задач. Веб-воркеры позволяют другому потоку, отдельному от основного, запускать скрипт в фоновом режиме. Рабочий обычно запускает трудоемкие процессы на отдельной дорожке от основного потока, чтобы взаимодействие с пользователем не блокировалось, и во многих случаях пользователь не заметит никаких прерываний при взаимодействии с пользовательским интерфейсом. Это асинхронное выполнение кода.

Рабочие потоки позволяют JavaScript работать асинхронно, но их использование ограничено. Например, рабочие не могут получить доступ к объектной модели документа (DOM), поэтому они не могут обновлять пользовательский интерфейс (UI). Рабочие потоки позволяют одновременно запускать потоки, не блокируя доступ пользователей к браузеру; однако зависимые процессы по-прежнему будут выдавать ошибку, если процессы, от которых они зависят, не завершились до вызова зависимых процессов. Например, в приведенном выше примере, если задача 3 зависит от завершения задачи 2, задача 3 выдаст ошибку, если она готова к развертыванию до завершения задачи 2. JavaScript решает эту проблему с помощью «Обещания », которые позволяют вам установить операцию, а затем дождаться возврата результата перед запуском зависимой операции.

Давайте обсудим, как асинхронное выполнение задачи в коде соотносится с опытом работы в линии Starbucks. Вы заходите в кофейню и ждете очереди, чтобы сделать заказ. С того момента, как вы подходите к стойке, чтобы отдать свой заказ, запускается асинхронный процесс.

Бариста ставит ваш заказ в очередь. Вы можете наблюдать за работой бариста за стойкой. Ожидая своего высокого латте с миндальным молоком, вы наблюдаете за их действием. Бариста эквивалентны основным потокам, они могут выполнять или делегировать выполнение любой задачи в процессе выполнения заказа. Бариста передают трудоемкие задачи «рабочим потокам», которые принимают форму их оборудования (например, кофемашин, тостеров и других принадлежностей). Как и рабочие потоки, оборудование ограничено в производительности и в совокупности не может выполнять все задачи, которые способен выполнять бариста. В то время как некоторые машины имеют ограниченный интерфейс с гостем (например, процессор кредитных карт или телефонный сканер), машины не могут улыбаться гостям или подавать их кофе.

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

Источник: https://www.wordnik.com/words/asynchronous

Источник: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Concepts