Простое для понимания определение «асинхронного события»?

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

Спасибо!

вопрос задан 30.12.2010
jasonbogd
1076 репутация

11 ответов


  • 423 рейтинг

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

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

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

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

    ответ дан epascarello, с репутацией 147573, 30.12.2010
  • 20 рейтинг

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

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

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

    ответ дан Pointy, с репутацией 307993, 30.12.2010
  • 18 рейтинг

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

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

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

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

    ответ дан Rob Weir, с репутацией 326, 30.12.2010
  • 12 рейтинг

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

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

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

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

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

    ответ дан chaimp, с репутацией 8430, 30.12.2010
  • 12 рейтинг

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

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

    Когда вы нажимаете Редактировать и Сохранить на SO, это происходит асинхронно.

    ответ дан Dejan Marjanovic, с репутацией 16896, 30.12.2010
  • 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 кем-то, кто нажимает кнопку на веб-странице. Реакция на нажатие кнопки произойдет в конечном итоге, не блокируя выполнение другого кода, такого как рендеринг страницы.

    ответ дан statenjason, с репутацией 4550, 30.12.2010
  • 5 рейтинг

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

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

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

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

    ответ дан Kai, с репутацией 4853, 30.12.2010
  • 2 рейтинг

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

    task1
    task2
    

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

    ответ дан Teson, с репутацией 3873, 30.12.2010
  • 1 рейтинг

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

    ответ дан blackHawk, с репутацией 1549, 16.04.2016
  • 0 рейтинг

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

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

    ответ дан Grant Gryczan, с репутацией 390, 25.04.2018
  • 0 рейтинг

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

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

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

    ответ дан Vitthal Walunj, с репутацией 11, 8.10.2015