web-dev-qa-db-fra.com

Facile à comprendre la définition de "événement asynchrone"?

J'ai souvent rencontré ce terme et, même après Google, je ne comprends toujours pas ce que cela signifie exactement. Existe-t-il une définition facile à comprendre (idéalement avec des exemples) de ce qu'un événement asynchrone est ce qu'une personne peut fournir?

Merci!

88
jasonbogd

Exemple non programmé:

Synchrone Vous voulez une pizza pour le dîner et vous êtes hors du genre congelé. Vous devez donc arrêter de jouer à WOW, ce qui contrarie votre guilde. Vous allez à la cuisine, préparez la pâte, couvrez-la de sauce, ajoutez le fromage et étouffez votre garniture au bacon préférée. Vous venez de passer 20 minutes de votre temps à préparer la pizza et 10 autres minutes au four. La minuterie émet un bip et vous retirez la tarte chaude. Vous pouvez vous asseoir devant votre ordinateur, manger la pizza et continuer votre raid.

Asynchrone Vous voulez une pizza pour le dîner tout en jouant WOW. Vous ouvrez une fenêtre de navigateur sur votre 5ème moniteur. Vous chargez le site Web Pizza et commandez votre pizza extra au fromage avec une sauce à l'ail et à la graisse de bacon. Vous retournez à votre raid et au bout de 20 minutes, la sonnette sonne. Vous obtenez la pizza. Vous vous assoyez devant votre ordinateur, mangez la pizza et continuez votre raid. 

Alors, quelle est la difference? Une façon de perdre 20-30 minutes de temps WOW précieux, l’autre façon de perdre 20 $ et le pourboire. 

423
epascarello

Votre page est livrée du serveur à un navigateur client, quelque part sur Internet. Le navigateur a dessiné la page sur un écran et quelqu'un - ou un objet - est en train de le regarder. C'est un jeu d'attente. Les yeux se déplacent d'avant en arrière, observant tel ou tel détail par sauts rapides, s'éloignant de temps en temps sur le côté, s'éloignant de l'écran, pour rechercher les sources de distraction dans l'environnement. L'horloge sonne. La page brille doucement, passivement, lorsque l'utilisateur passe inactif, la main sur une souris, le cou baissé et les yeux de plus en plus concentrés sur quelque chose d'invitant que votre page a à offrir.

Soudain, sans aucun avertissement, le curseur commence à bouger lorsque la main de la souris se raidit légèrement et commence à pousser la petite bosse de plastique sur la surface rugueuse de la table. Au fur et à mesure que la souris se déplace, son substitut à l'écran se déplace en imitation rapprochée, frôlant des images intéressantes et des remarques spirituelles dans le contenu de votre page. Finalement, une décision est prise, le mouvement se met en pause, un muscle ou deux se contractent légèrement et le bouton de la souris est enfoncé par un doigt persistant. Le micro-commutateur de la souris déclenche une impulsion électronique et le navigateur est soudainement informé de ce qui s'est passé: un clic de souris.

Dans tout cela, tout ce que l'utilisateur a fait en regardant la page s'est passé d'une manière totalement imprévisible pour le navigateur, pour le code client de votre page Web, pour tout ce qui réside sur vos serveurs. Il n'y avait pas de "temps d'attente" connu entre les actions humaines. Par conséquent, les actions transmises par l'équipement raccordé à l'ordinateur de l'utilisateur se produisaient lorsqu'elles se produisaient et non selon une horloge prévisible - c'est-à-dire qu'elles se produisaient de manière asynchrone.

19
Pointy

Pensez à la fin d'une entrevue, et le gars dit: "Ne nous appelle pas, nous t'appellerons". C'est l'essence d'un événement asynchrone. 

Normalement, vous définissez des fonctions et vous appelez des fonctions explicitement. Votre programme a une structure qui commence à la ligne 1, puis à la ligne 2, et à l'exception de certains codes conditionnels et itérations, fonctions d'appel, etc., il existe une structure simple, linéaire et synchrone.

Mais dans certains cas, vous avez des actions déclenchées par des événements extérieurs au contrôle direct du programme, des événements extérieurs au programme, tels que des événements d'interface utilisateur (l'utilisateur clique sur la souris) ou un événement de réseau votre serveur). Votre code ne génère pas ces événements directement. Ils sont générés en dehors de votre programme, souvent par le système d'exploitation, en fonction de leur surveillance des périphériques d'interface utilisateur et d'autres systèmes. Celles-ci sont appelées événements asynchrones.

Rappelez-vous simplement: "Ne nous appelez pas, nous vous appellerons"

18
Rob Weir

Un événement asynchrone est un événement qui s'exécute en dehors du thread principal de l'application.

La meilleure façon de comprendre consiste à comparer les événements qui se déroulent de manière synchrone. L'exemple le plus typique serait de charger une page Web.

Lorsque vous êtes allé sur cette page, vous avez cliqué sur un lien et attendu le chargement de la page. Vous n'avez pas été en mesure d'interagir avec cette page ni de l'utiliser jusqu'à la fin du chargement. Par contraste, si cette page devait avoir un événement AJAX (c'est-à-dire un événement asynchrone JavaScript et XML) associé à une action de l'utilisateur, cette page chargerait certaines données d'une autre source de manière asynchrone - en parallèle (théoriquement) avec toute autre action. passe.

Exemple avec deux événements synchrones (A et B): Le premier A fait quelque chose. Quand A est fini, B fait quelque chose.

Exemple avec deux événements asynchrones (A et B): Les deux A et B font quelque chose en même temps et aucun événement n'attend l'autre.

12
chaimp

"En programmation, les événements asynchrones sont ceux qui se produisent indépendamment du flux de programme principal. Les actions asynchrones sont des actions exécutées selon un schéma non bloquant, permettant au flux de programme principal de poursuivre le traitement."

"Avec Ajax, les applications Web peuvent Récupérer des données du serveur De manière asynchrone en arrière-plan Sans interférer avec l'affichage Et le comportement de la page existante."

Lorsque vous cliquez sur Editer et enregistrer sur SO, cela se produit de manière asynchrone.

12
Dejan Marjanovic

Voici un exemple d’opération asynchrone en javascript (vous devez ouvrir votre console javascript)

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

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

L'appel à console.log('Two!') sera exécuté sans bloquer le reste du code qui survient après.

Dans un scénario réel, remplacez setTimeout par une personne qui clique sur un bouton d'une page Web. La réponse au clic du bouton finira par se produire, sans bloquer d'autres exécutions de code telles que le rendu de page.

7
statenjason

En termes simples, cela signifie quelque chose qui se produit après un laps de temps inconnu, alors ne vous attendez pas à des résultats immédiats.

Par exemple, "Maman, puis-je avoir cinq dollars?"

En mettant la main à la porte de l'argent, je m'attends à ce qu'elle réponde immédiatement en me donnant de l'argent (synchrone).

De manière réaliste, elle va me regarder un instant, puis décider de répondre quand elle le voudra (asynchrone).

5
Kai

Lorsque deux événements différents se produisent séparément l'un de l'autre, vous ne pouvez donc pas le faire

task1
task2

sans vérifier que task1 vraiment fini.

2
Teson

Les événements asynchrones sont les événements que nous ne savons pas quand ils se produiront. Par exemple, lorsque le serveur est demandé pour un fichier, nous ne savons pas quand il remplira notre demande ou des événements d'interface utilisateur que nous ne savons pas quand l'utilisateur le fera. cliquez sur un bouton ou un autre élément de l'interface utilisateur, mais malgré cela, d'autres éléments de la page ou de l'application se produisent, rien ne bloque la page en gris de toute l'interface utilisateur tant qu'un fichier du serveur ne vient pas ou qu'un événement ne se produit que toutes les choses sont indépendantes c'est la puissance des événements asynchrones, dites simplement des événements indépendants

1
blackHawk

Si le code est synchrone (ou sync), cela signifie que chaque élément de code s'exécute dans l'ordre, de manière séquentielle, et que l'élément de code suivant ne peut pas être exécuté tant que le précédent n'est pas terminé. La plupart du code est généralement synchrone.

Si le code est asynchrone (ou async), cela signifie que le code peut être exécuté séparément et indépendamment des autres. S'il y a du code asynchrone au milieu d'un tas de code de synchronisation, dans le contexte de cette question particulière, le code async ne sera exécuté que lorsque son événement est déclenché, quel que soit l'emplacement du code de synchronisation. Il est complètement séparé et indépendant du code de synchronisation et s'exécute chaque fois que son événement le dit, pas seulement lorsque le code précédent est exécuté. Quelques exemples de cela pourraient être pour du code qui s'exécute sur un intervalle de temps, après qu'un fichier a été sauvegardé avec succès, après l'envoi d'une requête Web, lorsque l'utilisateur clique sur un bouton ou après le chargement d'une image.

0
Grant Gryczan

Vs synchrones Événements asynchrones

Certains gestionnaires d'événements sont appelés immédiatement lorsque l'événement se produit. On les appelle événements «synchrones». DocumentNew en est un exemple. Il est appelé dès que l'utilisateur crée un nouveau document.

Toutefois, certains événements sont appelés peu de temps après, généralement après une courte période d'inactivité. On les appelle événements «asynchrones». Ils sont asynchrones car cela déstabiliserait Source Insight si une macro écrite par l'utilisateur devait être appelée à l'heure exacte à laquelle l'événement s'est produit.

0
Vitthal Walunj