Легко ли понять определение "асинхронного события"?
Я часто сталкивался с этим термином, и даже после поиска в Google все еще не могу понять, что именно он означает. Есть ли какое-то простое для понимания (в идеале с примерами) определение того, что асинхронное событие может предоставить кто-то?
Спасибо!
11 ответов
Пример не программирования:
Синхронный Вы хотите пиццу на ужин, и вы вне замороженного вида. Поэтому вы должны перестать играть в WOW, что расстраивает вашу гильдию. Вы идете на кухню, делаете тесто, засыпаете его соусом, добавляете сыр и душите его своим любимым беконом. Вы только что потратили 20 минут на приготовление пиццы, а еще 10 минут в духовке. Таймер подает звуковой сигнал, и вы вытаскиваете горячий пирог. Вы можете сесть перед своим компьютером, съесть пиццу и продолжить набег.
Асинхронный Вы хотите пиццу на ужин, играя в WOW. Вы открываете окно браузера на своем 5-м мониторе. Вы загружаете сайт Pizza и заказываете свою дополнительную сырную пиццу с беконом со стороной чесночного сока с беконом. Вы возвращаетесь к своему рейду и через 20 минут звонит дверной звонок. Вы получаете пиццу. Вы садитесь перед компьютером, едите пиццу и продолжаете свой набег.
Так в чем же разница? Один способ тратить 20-30 минут драгоценного времени на WOW, а другой - на 20 долларов плюс чаевые.
Ваша страница доставляется с сервера в браузер клиента, где-то там, в Интернете. Браузер нарисовал страницу на экране, и кто-то - или что-то - смотрит на нее. Это игра ожидания. Глаза смещаются взад и вперед, просматривая те или иные детали быстрыми прыжками, время от времени бросаясь в сторону от экрана, чтобы исследовать отвлекающие факторы в окружающей среде. Часы тикают. Страница светится мягко, пассивно, когда пользователь неактивно зависает, рука свободно накидывается на мышь, шея наклонена вниз, и глаза все больше и больше стремятся к чему-то привлекательному, что может предложить ваша страница.
Внезапно, без какого-либо предупреждения, курсор начинает двигаться, когда рука мыши слегка напрягается и начинает подталкивать маленький пластиковый удар по неровной поверхности стола. По мере движения мыши ее суррогат на экране движется в тесной имитации, выпасая интересные картинки и остроумные замечания в содержании вашей страницы. В конце концов решение принимается, движение останавливается, мышца или два слегка сокращаются, и кнопка мыши нажимается настойчивым пальцем. Микропереключатель в мыши запускает электронный импульс, и внезапно браузер узнает о том, что произошло: щелчок мыши.
При этом все, что делал пользователь, глядя на страницу, происходило совершенно непредсказуемо для браузера, любого клиентского кода на вашей веб-странице и всего, что находится на ваших серверах. Не было заметного "времени ожидания" между человеческими действиями. Следовательно, действия, передаваемые оборудованием, подключенным к компьютеру пользователя, происходили тогда, когда они происходили, а не в соответствии с предсказуемыми часами, то есть они происходили асинхронно.
Подумайте об окончании интервью, и они говорят: "Не звоните нам, мы вам позвоним". В этом суть асинхронного события.
Обычно вы определяете функции и вызываете функции явно. Ваша программа имеет структуру, в которой она начинается со строки 1, затем строки 2, и, за исключением некоторого условного кода и итераций, вызова функций и т. Д., Существует простая, линейная, синхронная структура.
Но в некоторых случаях у вас есть действия, которые запускаются событиями, не относящимися к прямому управлению программой, событиями, происходящими извне программы, такими как события пользовательского интерфейса (пользователь щелкает мышью) или сетевое событие (кто-то пытается подключиться к нему). ваш сервер). Ваш код не генерирует эти события напрямую. Они генерируются вне вашей программы, часто ОС, основываясь на их мониторинге устройств пользовательского интерфейса и других систем. Это так называемые асинхронные события.
Просто помните: "Не звоните нам, мы вам позвоним"
Асинхронное событие - это событие, которое выполняется вне основного потока приложения.
Лучший способ понять это сравнить с событиями, которые происходят синхронно. Наиболее типичным примером будет загрузка веб-страницы.
Когда вы переходили на эту страницу, вы нажимали на ссылку и ждали загрузки страницы, но не могли взаимодействовать или использовать эту страницу, пока она не закончила загрузку. Напротив, если бы на этой странице было событие AJAX (то есть асинхронное событие JavaScript и XML), связанное с каким-либо действием пользователя, эта страница загружала бы некоторые данные из другого источника асинхронно - параллельно (теоретически) с любыми другими выполняемыми действиями.
Пример с двумя синхронными событиями (A и B): первый A что-то делает. Когда А закончил, Б что-то делает.
Пример с двумя асинхронными событиями (A и B): и A, и B делают что-то одновременно, и ни одно событие не ожидает другого.
"В программировании асинхронные события - это события, происходящие независимо от основного потока программы. Асинхронные действия - это действия, выполняемые в неблокирующей схеме, что позволяет основному потоку программы продолжать обработку".
"С помощью Ajax веб-приложения могут асинхронно получать данные с сервера в фоновом режиме, не мешая отображению и поведению существующей страницы".
Когда вы нажимаете Edit и Save on SO, это происходит асинхронно.
Вот пример асинхронной операции в 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 кем-то, кто нажимает кнопку на веб-странице. Ответ на нажатие кнопки произойдет в конечном итоге, не блокируя выполнение другого кода, такого как рендеринг страницы.
Проще говоря, это означает что-то, что происходит через неизвестное количество времени, поэтому не ожидайте немедленных результатов.
Например, "Мама, можно мне пять долларов?"
Протягивая руку за деньги, я ожидаю, что она немедленно ответит, дав мне деньги (синхронно).
Реально, она будет смотреть на меня минуту или две, а затем решит ответить, когда захочет (асинхронно).
Когда два разных события происходят отдельно друг от друга, так что вы не можете сделать
task1
task2
без проверки этого task1
действительно закончил.
Асинхронные события - это те события, которые мы не знаем, когда это произойдет в будущем, например, когда сервер запрашивает какой-то файл, мы не знаем, когда он выполнит наш запрос, или события пользовательского интерфейса, которые мы не знаем, когда пользователь будет нажмите на кнопку или другой элемент пользовательского интерфейса, но, несмотря на то, что на странице или в приложении происходят другие вещи, они ничего не блокируют, скажем, страница затеняет весь пользовательский интерфейс, пока какой-то файл с сервера не появится или не произойдет какое-либо событие, все вещи будут независимыми это сила асинхронных событий, просто скажем, независимые события
Синхронный Vs. Асинхронные события
Некоторые обработчики событий вызываются сразу же, когда происходит событие. Это так называемые синхронные события. Примером является DocumentNew. Он вызывается, как только пользователь создает новый документ.
Однако некоторые события вызываются вскоре после того, как событие происходит, обычно после короткого периода простоя. Это так называемые асинхронные события. Они асинхронны, потому что это приведет к дестабилизации Source Insight, если пользовательский макрос будет вызван именно в то время, когда произошло событие.
Если код является синхронным (или синхронизирующим), это означает, что каждый фрагмент кода выполняется по порядку, последовательно, и следующий фрагмент кода не может выполняться, пока предыдущий не будет завершен. Большая часть кода обычно является синхронной.
Если код асинхронный (или асинхронный), это означает, что код может выполняться отдельно и независимо от другого кода. Если асинхронный код находится в середине группы синхронизирующего кода, в контексте этого конкретного вопроса асинхронный код будет выполняться только при его событии, независимо от того, где в коде синхронизации вы его поместили. Он полностью отделен и не зависит от кода синхронизации и запускается всякий раз, когда его событие указывает, а не только когда выполняется предыдущий фрагмент кода. Некоторые примеры этого могут быть для кода, который выполняется с определенным интервалом времени, после успешного сохранения файла, после отправки веб-запроса, когда пользователь нажимает кнопку или после загрузки изображения.