Легко понять определение «асинхронного события»? [закрыто]


88

Я часто сталкивался с этим термином, и даже после поиска в Google до сих пор не могу понять, что именно он означает. Есть ли какое-то простое для понимания (в идеале с примерами) определение того, что такое асинхронное событие, которое кто-то может предоставить?

Благодарность!

Ответы:


422

Пример без программирования:

Синхронный Вы хотите пиццу на ужин, но у вас нет замороженного продукта. Так что вам нужно перестать играть в WOW, который расстраивает вашу гильдию. Вы идете на кухню, делаете тесто, покрываете его соусом, добавляете сыр и придавливаете его своей любимой начинкой из бекона. Вы только что потратили 20 минут своего времени на приготовление пиццы и еще 10 минут в духовке. Таймер пищит, и вы вытаскиваете горячий пирог. Вы можете снова сесть перед компьютером, съесть пиццу и продолжить свой рейд.

Асинхронный. Вы хотите пиццу на ужин во время игры в WOW. Вы открываете окно браузера на своем 5-м мониторе. Вы загружаете веб-сайт Pizza и заказываете дополнительную сырную пиццу с беконом с чесночным соусом, смазанным беконом. Вы возвращаетесь в свой рейд и через 20 минут звонит дверной звонок. Вы получаете пиццу. Вы снова садитесь за компьютер, ешьте пиццу и продолжаете свой рейд.

Так в чем разница? В одном случае вы тратите 20-30 минут драгоценного WOW-времени, а в другом - 20 долларов плюс чаевые.


53
Мне грустно, что это так смешно.
Денис Хектор

3
Я должен признать, что это может быть лучшее объяснение, не связанное с программированием, которое я видел за долгое время! отличный пример!
Ибан Домингес Нода

Я понял, и этот ответ помог мне понять это, но я хочу пиццу сейчас = / и запрос не будет продолжаться, пока я не получу пиццу -_-
JMASTER B

Обожаю "Непрограммируемые примеры" !!
Синтия Санчес

@epascarello Забавная сторона в этом очень хорошо работает !!! Не говоря уже о том, что это понятно. Мне нужно связаться с вами для проекта
Омар

19

Ваша страница доставляется с сервера в клиентский браузер где-то в Интернете. Браузер нарисовал страницу на экране, и кто-то - или что-то - смотрит на нее. Это игра на ожидание. Глаза перемещаются взад и вперед, улавливая ту или иную деталь быстрыми прыжками, время от времени бросаясь в сторону, от экрана, чтобы исследовать отвлекающие факторы в окружающей среде. Часы тикают. Страница светится мягко, пассивно, когда пользователь зависает в неактивном состоянии, рука свободно накрывается на мышь, шея наклонена, а глаза все больше и больше сосредоточены на том, что может предложить ваша страница.

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

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


3
+1 Хорошая история :) очень заманчиво ... заставило меня мычать мышкой и нажимать стрелку "голос за". И снова асинхронное событие ....
Феликс Клинг

1
Отличный пример, выбор события браузера просто великолепен!
sjsam

18

Подумайте о конце интервью, и этот парень говорит: «Не звоните нам, мы вам позвоним». В этом суть асинхронного события.

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

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

Просто помните: «Не звоните нам, мы вам перезвоним»


12

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

«С помощью Ajax веб-приложения могут получать данные с сервера асинхронно в фоновом режиме, не мешая отображению и поведению существующей страницы».

Когда вы нажимаете Edit и Save в SO, это происходит асинхронно.


12

Асинхронное событие - это событие, которое выполняется за пределами основного потока приложения.

Лучший способ понять - сравнить с синхронными событиями. Наиболее типичным примером является загрузка веб-страницы.

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

Пример с двумя синхронными событиями (A и B): сначала A что-то делает. Когда А закончил, Б что-то делает.

Пример с двумя асинхронными событиями (A и B): и A, и B делают что-то одновременно, и ни одно событие не ожидает другого.


7

Вот пример асинхронной операции в javascript (у вас должна быть открыта консоль javascript)

console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!

Вызов console.log('Two!')будет выполнен без блокировки остальной части кода, который происходит после него.

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


5

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

Например, «Мама, можно мне пять долларов?»

Протягивая руку за деньгами, я ожидаю, что она немедленно ответит, давая мне деньги (синхронно).

На самом деле она посмотрит на меня пару мгновений, а затем решит ответить, когда захочет (асинхронно).


2

Когда два разных события происходят отдельно друг от друга, поэтому вы не можете

task1
task2

без проверки, что task1действительно закончили.


1

Асинхронные события - это те события, которые мы не знаем, когда они произойдут в будущем, например, когда сервер запрашивает какой-то файл, мы не знаем, когда он выполнит наш запрос или события пользовательского интерфейса, которые мы не знаем, когда пользователь нажмите кнопку или другой элемент пользовательского интерфейса, но, несмотря на то, что на странице или в приложении происходят другие вещи, он ничего не блокирует, скажем, страница неактивна, весь пользовательский интерфейс, пока какой-либо файл с сервера не поступит или не произойдет какое-то событие, все вещи независимы это сила асинхронных событий, просто скажем независимые события


0

Синхронный Vs. Асинхронные события

Некоторые обработчики событий вызываются сразу после наступления события. Эти события называются «синхронными». Примером является DocumentNew. Он вызывается, как только пользователь создает новый документ.

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.