Что означает асинхронный режим?

Обычно, когда данная программа запускается, в ней есть разные функции/части, но все они не запускаются сразу, обычно это происходит одна за другой.

Например, предположим, что на экране есть трикнопки, и пользователь нажимает все три с высокой скоростью. Все ли три кнопки начинают работать одновременно? В большинстве случаев ответ будет только один: работает по одному. Выполняется первая функция, затем следующая, а затем следующая. В такой системе пользователю приходится ждать завершения определенных функций, пока он не достигнет желаемой. Теперь, поскольку мы предположили, что здесь три кнопки, ситуация может быть не такой утомительной, но что, если их 100? В таких случаях вся программа в основном останавливается с точки зрения пользователя, потому что код ничего не отображает, выполняя функции одну за другой. Это становится разочаровывающим опытом и не является хорошим использованием вычислительной мощности компьютера.

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

Теперь веб-воркеры довольно полезны, но они не могут получить доступ к DOM (объектной модели документа), которая представляет собой API, который представляет и взаимодействует с любым документом HTML или XML, поэтому мы не можем заставить рабочий поток напрямую что-либо делать. для обновления пользовательского интерфейса.

Вторая проблема заключается в том, что хотя код и не блокирует, он в основном становится синхронным. Это становится проблематичным, когда функция зависит от нескольких предыдущих процессов. Как например

Основная нить: Работа X → Работа Y

В этом случае предположим, что X извлекает изображение, а Y добавляет к нему фильтр. Если мы запустим X и сразу попытаемся запустить Y, то получим ошибку, потому что образ еще не будет доступен.

Если мы можем гарантировать, что эти результаты будут доступны одновременно, то программа может работать без ошибок, но это не очень практично.

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

Основная тема: Работа X Работа Y

Обещание: |Асинхронная операция|

А поскольку операция выполняется где-то еще, основной поток не блокируется во время обработки асинхронной операции.

Вывод:

Современный дизайн программного обеспечения в основном вращается вокруг асинхронного программирования и использует его, чтобы позволить программам делать несколько вещей одновременно. Раньше было трудно писать асинхронные коды, но теперь это намного проще, хотя и требует времени, чтобы к этому привыкнуть.

В следующей статье я объясню, почему важен асинхронный код и как разработать такой код.

Спасибо!