Définition simple de «événement asynchrone»? [fermé]


88

J'ai beaucoup rencontré ce terme, et même après googler, 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'est un événement asynchrone que quelqu'un peut fournir?

Merci!

Réponses:


422

Exemple de non-programmation:

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 dérange votre guilde. Vous allez à la cuisine, faites la pâte, couvrez-la de sauce, ajoutez le fromage et étouffez votre garniture de bacon préférée. Vous venez de passer 20 minutes de votre temps à faire la pizza avec encore 10 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 de Pizza et commandez votre pizza au bacon au fromage supplémentaire avec une sauce à l'ail et à la graisse de bacon. Vous retournez à votre raid et après 20 minutes, la sonnette de la porte sonne. Vous obtenez la pizza. Vous vous asseyez devant votre ordinateur, mangez la pizza et continuez votre raid.

Alors, quelle est la difference? D'une manière, vous perdez 20 à 30 minutes de temps précieux WOW, l'autre vous perdez 20 $ plus pourboire.


53
Je suis triste de trouver cela si drôle.
Denis Hoctor le

3
Je dois admettre que c'est peut-être la meilleure explication hors programmation que j'ai vue depuis longtemps! excellent exemple!
Iban Dominguez Noda

Je comprends et cette réponse m'aide à la comprendre, mais je veux de la pizza maintenant = / et la demande ne continuera pas tant que je
n'aurai

J'adore les "exemples sans programmation" !!
Cynthia Sanchez

@epascarello Le côté drôle fonctionne vraiment bien !!! Sans oublier, il est clair à comprendre. J'ai besoin de vous joindre pour un projet
Omar

19

Votre page est envoyée du serveur à un navigateur client, quelque part sur Internet. Le navigateur a dessiné la page sur un écran et quelqu'un - ou quelque chose - la regarde. C'est un jeu d'attente. Les yeux se déplacent d'avant en arrière, captant tel ou tel détail par sauts rapides, s'élançant sur le côté de temps en temps, loin de l'écran, pour enquêter sur les distractions dans l'environnement. L'horloge tourne. La page brille doucement, passivement, alors que l'utilisateur survole inactif, la main lâchement drapée sur une souris, le cou plié et les yeux de plus en plus attentifs à quelque chose d'invitant que votre page a à offrir.

Soudainement, sans aucun avertissement, le curseur commence à bouger alors que la main de la souris se raidit légèrement et commence à pousser la petite bosse en 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 dans une imitation rapprochée, passant devant des images intéressantes et des remarques spirituelles dans le contenu de votre page. Finalement, une décision est prise, le mouvement s'arrête, un muscle ou deux se contractent légèrement et le bouton de la souris est enfoncé par un doigt insistant. Le micro-interrupteur de la souris déclenche une impulsion électronique, et soudain le navigateur prend conscience de ce qui s'est passé: un clic de souris.

Dans tout cela, tout ce que l'utilisateur a fait en regardant la page est arrivé d'une manière totalement imprévisible pour le navigateur, pour tout code client de votre page Web, pour tout ce qui réside sur vos serveurs. Il n'y avait pas de «temps d'attente» connaissable entre les actions humaines. Les actions, par conséquent, telles que transmises par l'équipement accroché à 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 .


3
+1 Belle histoire :) très invitante ... ça m'a fait bouger la souris et cliquer sur la flèche "vote vers le haut". Et voici à nouveau l'événement asynchrone ....
Felix Kling

1
Excellent exemple, le choix d'un événement de navigateur est tout simplement génial!
sjsam

18

Pensez à la fin d'une interview, et le type dit: "Ne nous appelez pas, nous vous 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 où il commence à partir de la ligne 1, puis de la ligne 2, et à l'exception de certains codes conditionnels et itérations, fonctions d'appel, etc., il existe une structure synchrone simple, linéaire.

Mais dans certains cas, vous avez des actions qui sont déclenchées par des événements en dehors du contrôle direct du programme, des choses qui viennent de l'extérieur du programme, comme des événements d'interface utilisateur (l'utilisateur clique sur la souris) ou un événement réseau (quelqu'un essaie de se connecter à votre serveur). Votre code ne génère pas directement ces événements. 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. Ces événements sont appelés événements asynchrones.

N'oubliez pas: "Ne nous appelez pas, nous vous appellerons"


12

"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 dans un schéma non bloquant, permettant au flux de programme principal de continuer 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 Modifier et enregistrer sur SO, cela se produit de manière asynchrone.


12

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 est de comparer aux événements qui s'exécutent de manière synchrone. L'exemple le plus typique serait le chargement d'une page Web.

Lorsque vous êtes allé sur cette page, vous avez cliqué sur un lien et attendu que la page se charge et vous n'avez pas pu interagir avec ou utiliser cette page jusqu'à la fin de son 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 toutes les autres actions en cours.

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

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


7

Voici un exemple d'opération asynchrone en javascript (vous devez avoir votre console javascript ouverte)

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 se produit après.

Dans un scénario réel, remplacez setTimeout par quelqu'un qui clique sur un bouton sur une page Web. La réponse au clic sur le bouton se produira éventuellement, sans bloquer l'exécution d'autres codes tels que le rendu de page.


5

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?"

Je m'attends à ce qu'elle réponde immédiatement en me donnant de l'argent (synchrone).

De manière réaliste, elle me regardera pendant un moment ou deux, puis décidera de répondre quand elle le voudra (asynchrone).


2

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

task1
task2

sans vérifier que task1vraiment terminé.


1

Les événements asynchrones sont les événements dont nous ne savons pas quand ils se produiront à l'avenir, par exemple lorsque le serveur est demandé pour un fichier, nous ne savons pas quand il répondra à notre demande ou les événements de l'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 choses sur la page ou l'application se produisent, cela ne bloque rien, dites que la page a grisé toute l'interface utilisateur jusqu'à ce qu'un fichier du serveur ne vienne pas ou qu'un événement se produise, tout est indépendant c'est la puissance des événements asynchrones, disons simplement des événements indépendants


0

Vs synchrone. Événements asynchrones

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

Cependant, certains événements sont appelés peu de temps après que l'événement se soit produit, généralement après une courte période d'inactivité. Ces événements sont appelés é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

Si le code est synchrone (ou synchronisé), cela signifie que chaque morceau de code s'exécute dans l'ordre, séquentiellement, et le morceau de code suivant ne peut pas s'exécuter 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 asynchrone), cela signifie que le code peut s'exécuter séparément et indépendamment des autres codes. 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 s'exécutera que lorsque son événement est déclenché, quel que soit l'endroit où vous l'avez placé dans le 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 l'indique, pas seulement lorsque le morceau de code précédent est terminé. Quelques exemples de ceci seraient pour le code qui s'exécute à un intervalle de temps, après qu'un fichier a été enregistré avec succès, après qu'une requête Web est envoyée, lorsque l'utilisateur clique sur un bouton ou après le chargement d'une image.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.