Leicht verständliche Definition von "asynchronem Ereignis"? [geschlossen]
88
Ich bin diesem Begriff oft begegnet und kann auch nach dem Googeln immer noch nicht verstehen, was er genau bedeutet. Gibt es eine leicht verständliche (idealerweise mit Beispielen) Definition dessen, was ein asynchrones Ereignis ist, das jemand bereitstellen kann?
Synchron
Sie möchten eine Pizza zum Abendessen und sind nicht mehr gefroren. Du musst also aufhören, WOW zu spielen, was deine Gilde verärgert. Sie gehen in die Küche, machen den Teig, bedecken ihn mit Sauce, fügen den Käse hinzu und ersticken ihn mit Ihrem Lieblingsspeck. Sie haben gerade 20 Minuten Ihrer Zeit damit verbracht, die Pizza mit weiteren 10 Minuten im Ofen zuzubereiten. Der Timer piept und Sie ziehen den heißen Kuchen heraus. Sie können sich wieder vor Ihren Computer setzen, die Pizza essen und Ihren Überfall fortsetzen.
Asynchron
Sie möchten eine Pizza zum Abendessen, während Sie WOW spielen. Sie öffnen ein Browserfenster auf Ihrem 5. Monitor. Sie laden die Pizza-Website auf und bestellen Ihre extra käsige Speckpizza mit einer Beilage Speckfett-Knoblauchsauce. Sie kehren zu Ihrem Überfall zurück und nach 20 Minuten läutet die Türklingel. Du bekommst die Pizza. Sie setzen sich wieder vor Ihren Computer, essen die Pizza und setzen Ihren Überfall fort.
Was ist der Unterschied? Auf die eine Weise verschwenden Sie 20 bis 30 Minuten wertvolle WOW-Zeit, auf die andere Weise verschwenden Sie 20 USD plus Trinkgeld.
Ich muss zugeben, dass dies die beste Erklärung ohne Programmierung ist, die ich seit langem gesehen habe! tolles Beispiel!
Iban Dominguez Noda
Ich bekomme es und diese Antwort hilft mir, es zu verstehen, aber ich möchte jetzt Pizza = / und die Anfrage würde nicht fortgesetzt, bis ich Pizza bekomme -_-
JMASTER B
Ich liebe "Nicht-Programmier-Beispiele" !!
Cynthia Sanchez
@epascarello Die lustige Seite funktioniert wirklich gut !!! Ganz zu schweigen davon, es ist klar zu verstehen. Ich brauche einen halten Sie für ein Projekt zu bekommen
Omar
19
Ihre Seite wird vom Server an einen Client-Browser irgendwo im Internet gesendet. Der Browser hat die Seite auf einem Bildschirm gezeichnet, und jemand - oder etwas anderes - schaut sie sich an. Es ist ein Wartespiel. Die Augen bewegen sich hin und her, nehmen dieses oder jenes Detail in schnellen Sprüngen auf und schießen ab und zu zur Seite, weg vom Bildschirm, um Ablenkungen in der Umgebung zu untersuchen. Die Uhr tickt. Die Seite leuchtet sanft und passiv, während der Benutzer inaktiv schwebt, die Hand lose über eine Maus drapiert, den Hals nach unten gebeugt und die Augen immer mehr auf etwas gerichtet, das Ihre Seite zu bieten hat.
Plötzlich beginnt sich der Cursor ohne Vorwarnung zu bewegen, während sich die Hand der Maus leicht versteift und die kleine Plastikbeule über die raue Oberfläche des Tisches stößt. Während sich die Maus bewegt, bewegt sich ihr Ersatz auf dem Bildschirm in enger Nachahmung und streift an interessanten Bildern und witzigen Bemerkungen im Inhalt Ihrer Seite vorbei. Schließlich wird eine Entscheidung getroffen, die Bewegung pausiert, ein oder zwei Muskeln ziehen sich leicht zusammen und die Maustaste wird von einem hartnäckigen Finger gedrückt. Der Mikroschalter in der Maus löst einen elektronischen Impuls aus und plötzlich wird der Browser darauf aufmerksam gemacht, was passiert ist: ein Mausklick.
Bei alledem ist alles, was der Benutzer beim Betrachten der Seite getan hat, auf eine Weise geschehen, die für den Browser, für jeden Clientcode auf Ihrer Webseite und für alles, was sich auf Ihren Servern befindet, völlig unvorhersehbar ist. Es gab keine erkennbare "Wartezeit" zwischen menschlichen Handlungen. Die Aktionen, die von den an den Computer des Benutzers angeschlossenen Geräten übertragen wurden, erfolgten daher, wenn sie stattfanden, und nicht nach einer vorhersehbaren Uhr - das heißt, sie erfolgten asynchron .
+1 Schöne Geschichte :) sehr einladend ... es hat mich dazu gebracht, meine Maus zu bewegen und auf den Pfeil "Nach oben stimmen" zu klicken. Und hier ist wieder das asynchrone Ereignis ...
Felix Kling
1
Tolles Beispiel, die Auswahl eines Browser-Events ist einfach toll!
sjsam
18
Denken Sie an das Ende eines Interviews, und der Typ sagt: "Rufen Sie uns nicht an, wir rufen Sie an." Das ist die Essenz eines asynchronen Ereignisses.
Normalerweise definieren Sie Funktionen und rufen Funktionen explizit auf. Ihr Programm hat eine Struktur, in der es in Zeile 1 und dann in Zeile 2 beginnt. Abgesehen von einigen bedingten Codes und Iterationen, aufrufenden Funktionen usw. gibt es eine einfache, lineare, synchrone Struktur.
In einigen Fällen haben Sie jedoch Aktionen, die durch Ereignisse außerhalb der direkten Steuerung des Programms ausgelöst werden, z. B. Ereignisse außerhalb der Programmfunktion, z. B. Ereignisse auf der Benutzeroberfläche (Benutzer klickt mit der Maus) oder ein Netzwerkereignis (jemand versucht, eine Verbindung herzustellen) Ihr Server). Ihr Code generiert diese Ereignisse nicht direkt. Sie werden außerhalb Ihres Programms generiert, häufig vom Betriebssystem basierend auf der Überwachung von Benutzeroberflächengeräten und anderen Systemen. Diese werden als asynchrone Ereignisse bezeichnet.
Denken Sie daran: "Rufen Sie uns nicht an, wir rufen Sie an."
"Bei der Programmierung sind asynchrone Ereignisse solche, die unabhängig vom Hauptprogrammfluss auftreten. Asynchrone Aktionen sind Aktionen, die in einem nicht blockierenden Schema ausgeführt werden, sodass der Hauptprogrammfluss die Verarbeitung fortsetzen kann."
"Mit Ajax können Webanwendungen Daten asynchron im Hintergrund vom Server abrufen, ohne die Anzeige und das Verhalten der vorhandenen Seite zu beeinträchtigen."
Wenn Sie auf SO bearbeiten und speichern klicken, geschieht dies asynchron.
Ein asynchrones Ereignis ist ein Ereignis, das außerhalb des Hauptthreads der Anwendung ausgeführt wird.
Der beste Weg, dies zu verstehen, ist der Vergleich mit Ereignissen, die synchron ausgeführt werden. Das typischste Beispiel wäre das Laden einer Webseite.
Wenn Sie zu dieser Seite gegangen sind, haben Sie auf einen Link geklickt und auf das Laden der Seite gewartet. Sie konnten mit dieser Seite erst interagieren oder sie verwenden, als sie vollständig geladen wurde. Wenn dieser Seite hingegen ein AJAX-Ereignis (das ist asynchrones JavaScript- und XML-Ereignis) mit einer Benutzeraktion zugeordnet wäre, würde diese Seite einige Daten aus einer anderen Quelle asynchron laden - parallel (theoretisch) zu anderen laufenden Aktionen.
Beispiel mit zwei synchronen Ereignissen (A und B): Zuerst macht A etwas. Wenn A fertig ist, macht B etwas.
Beispiel mit zwei asynchronen Ereignissen (A und B): Sowohl A als auch B tun gleichzeitig etwas und keines der Ereignisse wartet auf das andere.
Der Aufruf von console.log('Two!')wird ausgeführt, ohne den Rest des Codes zu blockieren, der danach erfolgt.
Ersetzen Sie in einem realen Szenario setTimeout durch jemanden, der auf eine Schaltfläche auf einer Webseite klickt. Die Reaktion auf das Klicken auf die Schaltfläche erfolgt schließlich, ohne dass andere Codeausführungen wie das Rendern von Seiten blockiert werden.
Asynchrone Ereignisse sind Ereignisse, von denen wir nicht wissen, wann sie in Zukunft auftreten werden, z. B. wenn der Server für eine Datei angefordert wird. Wir wissen nicht, wann er unsere Anforderung erfüllt, oder UI-Ereignisse, von denen wir nicht wissen, wann der Benutzer dies tun wird Klicken Sie auf eine Schaltfläche oder ein anderes UI-Element, aber trotzdem blockieren andere Dinge auf der Seite oder in der Anwendung nichts, was besagt, dass die Seite die gesamte UI ausgegraut hat, bis eine Datei vom Server nicht kommt oder ein Ereignis eintritt. Alle Dinge sind unabhängig Dies ist die Kraft asynchroner Ereignisse, einfach unabhängige Ereignisse
Einige Ereignishandler werden sofort aufgerufen, wenn das Ereignis eintritt. Diese werden als "synchrone" Ereignisse bezeichnet. Ein Beispiel ist DocumentNew. Es wird aufgerufen, sobald der Benutzer ein neues Dokument erstellt.
Einige Ereignisse werden jedoch kurz nach dem Eintreten des Ereignisses aufgerufen, normalerweise nach einer kurzen Leerlaufzeit. Diese werden als "asynchrone" Ereignisse bezeichnet. Sie sind asynchron, da dies Source Insight destabalisieren würde, wenn ein benutzerdefiniertes Makro genau zum Zeitpunkt des Ereignisses aufgerufen würde.
Wenn der Code synchron (oder synchronisiert) ist, bedeutet dies, dass jeder Code nacheinander ausgeführt wird und der nächste Code erst ausgeführt werden kann, wenn der vorherige abgeschlossen ist. Der meiste Code ist normalerweise synchron.
Wenn Code asynchron (oder asynchron ) ist, bedeutet dies, dass Code separat und unabhängig von anderem Code ausgeführt werden kann. Wenn sich in der Mitte einer Reihe von Synchronisierungscodes Async-Code befindet, wird der Async-Code im Kontext dieser speziellen Frage nur ausgeführt, wenn sein Ereignis ausgelöst wird, unabhängig davon, wo im Synchronisierungscode Sie ihn abgelegt haben. Es ist völlig unabhängig vom Synchronisierungscode und wird immer dann ausgeführt, wenn das Ereignis dies anzeigt, und nicht nur, wenn der vorherige Code ausgeführt wurde. Einige Beispiele hierfür sind Code, der in einem bestimmten Zeitintervall ausgeführt wird, nachdem eine Datei erfolgreich gespeichert wurde, nachdem eine Webanforderung gesendet wurde, wenn der Benutzer auf eine Schaltfläche klickt oder nachdem ein Bild geladen wurde.
Ihre Seite wird vom Server an einen Client-Browser irgendwo im Internet gesendet. Der Browser hat die Seite auf einem Bildschirm gezeichnet, und jemand - oder etwas anderes - schaut sie sich an. Es ist ein Wartespiel. Die Augen bewegen sich hin und her, nehmen dieses oder jenes Detail in schnellen Sprüngen auf und schießen ab und zu zur Seite, weg vom Bildschirm, um Ablenkungen in der Umgebung zu untersuchen. Die Uhr tickt. Die Seite leuchtet sanft und passiv, während der Benutzer inaktiv schwebt, die Hand lose über eine Maus drapiert, den Hals nach unten gebeugt und die Augen immer mehr auf etwas gerichtet, das Ihre Seite zu bieten hat.
Plötzlich beginnt sich der Cursor ohne Vorwarnung zu bewegen, während sich die Hand der Maus leicht versteift und die kleine Plastikbeule über die raue Oberfläche des Tisches stößt. Während sich die Maus bewegt, bewegt sich ihr Ersatz auf dem Bildschirm in enger Nachahmung und streift an interessanten Bildern und witzigen Bemerkungen im Inhalt Ihrer Seite vorbei. Schließlich wird eine Entscheidung getroffen, die Bewegung pausiert, ein oder zwei Muskeln ziehen sich leicht zusammen und die Maustaste wird von einem hartnäckigen Finger gedrückt. Der Mikroschalter in der Maus löst einen elektronischen Impuls aus und plötzlich wird der Browser darauf aufmerksam gemacht, was passiert ist: ein Mausklick.
Bei alledem ist alles, was der Benutzer beim Betrachten der Seite getan hat, auf eine Weise geschehen, die für den Browser, für jeden Clientcode auf Ihrer Webseite und für alles, was sich auf Ihren Servern befindet, völlig unvorhersehbar ist. Es gab keine erkennbare "Wartezeit" zwischen menschlichen Handlungen. Die Aktionen, die von den an den Computer des Benutzers angeschlossenen Geräten übertragen wurden, erfolgten daher, wenn sie stattfanden, und nicht nach einer vorhersehbaren Uhr - das heißt, sie erfolgten asynchron .
quelle
Denken Sie an das Ende eines Interviews, und der Typ sagt: "Rufen Sie uns nicht an, wir rufen Sie an." Das ist die Essenz eines asynchronen Ereignisses.
Normalerweise definieren Sie Funktionen und rufen Funktionen explizit auf. Ihr Programm hat eine Struktur, in der es in Zeile 1 und dann in Zeile 2 beginnt. Abgesehen von einigen bedingten Codes und Iterationen, aufrufenden Funktionen usw. gibt es eine einfache, lineare, synchrone Struktur.
In einigen Fällen haben Sie jedoch Aktionen, die durch Ereignisse außerhalb der direkten Steuerung des Programms ausgelöst werden, z. B. Ereignisse außerhalb der Programmfunktion, z. B. Ereignisse auf der Benutzeroberfläche (Benutzer klickt mit der Maus) oder ein Netzwerkereignis (jemand versucht, eine Verbindung herzustellen) Ihr Server). Ihr Code generiert diese Ereignisse nicht direkt. Sie werden außerhalb Ihres Programms generiert, häufig vom Betriebssystem basierend auf der Überwachung von Benutzeroberflächengeräten und anderen Systemen. Diese werden als asynchrone Ereignisse bezeichnet.
Denken Sie daran: "Rufen Sie uns nicht an, wir rufen Sie an."
quelle
"Bei der Programmierung sind asynchrone Ereignisse solche, die unabhängig vom Hauptprogrammfluss auftreten. Asynchrone Aktionen sind Aktionen, die in einem nicht blockierenden Schema ausgeführt werden, sodass der Hauptprogrammfluss die Verarbeitung fortsetzen kann."
Wenn Sie auf SO bearbeiten und speichern klicken, geschieht dies asynchron.
quelle
Ein asynchrones Ereignis ist ein Ereignis, das außerhalb des Hauptthreads der Anwendung ausgeführt wird.
Der beste Weg, dies zu verstehen, ist der Vergleich mit Ereignissen, die synchron ausgeführt werden. Das typischste Beispiel wäre das Laden einer Webseite.
Wenn Sie zu dieser Seite gegangen sind, haben Sie auf einen Link geklickt und auf das Laden der Seite gewartet. Sie konnten mit dieser Seite erst interagieren oder sie verwenden, als sie vollständig geladen wurde. Wenn dieser Seite hingegen ein AJAX-Ereignis (das ist asynchrones JavaScript- und XML-Ereignis) mit einer Benutzeraktion zugeordnet wäre, würde diese Seite einige Daten aus einer anderen Quelle asynchron laden - parallel (theoretisch) zu anderen laufenden Aktionen.
Beispiel mit zwei synchronen Ereignissen (A und B): Zuerst macht A etwas. Wenn A fertig ist, macht B etwas.
Beispiel mit zwei asynchronen Ereignissen (A und B): Sowohl A als auch B tun gleichzeitig etwas und keines der Ereignisse wartet auf das andere.
quelle
Hier ist ein Beispiel für eine asynchrone Operation in Javascript (Sie müssen Ihre Javascript-Konsole geöffnet haben).
Der Aufruf von
console.log('Two!')
wird ausgeführt, ohne den Rest des Codes zu blockieren, der danach erfolgt.Ersetzen Sie in einem realen Szenario setTimeout durch jemanden, der auf eine Schaltfläche auf einer Webseite klickt. Die Reaktion auf das Klicken auf die Schaltfläche erfolgt schließlich, ohne dass andere Codeausführungen wie das Rendern von Seiten blockiert werden.
quelle
Einfach ausgedrückt bedeutet dies etwas, das nach einer unbekannten Zeitspanne auftritt. Erwarten Sie also keine sofortigen Ergebnisse.
Zum Beispiel: "Mama, kann ich fünf Dollar haben?"
Wenn ich meine Hand nach Geld strecke, erwarte ich, dass sie sofort reagiert, indem sie mir Geld gibt (synchron).
Realistisch gesehen wird sie mich einen oder zwei Moment lang ansehen und dann beschließen, zu antworten, wann sie will (asynchron).
quelle
Wenn zwei verschiedene Ereignisse getrennt voneinander auftreten, können Sie dies nicht tun
ohne zu überprüfen, dass
task1
wirklich fertig.quelle
Asynchrone Ereignisse sind Ereignisse, von denen wir nicht wissen, wann sie in Zukunft auftreten werden, z. B. wenn der Server für eine Datei angefordert wird. Wir wissen nicht, wann er unsere Anforderung erfüllt, oder UI-Ereignisse, von denen wir nicht wissen, wann der Benutzer dies tun wird Klicken Sie auf eine Schaltfläche oder ein anderes UI-Element, aber trotzdem blockieren andere Dinge auf der Seite oder in der Anwendung nichts, was besagt, dass die Seite die gesamte UI ausgegraut hat, bis eine Datei vom Server nicht kommt oder ein Ereignis eintritt. Alle Dinge sind unabhängig Dies ist die Kraft asynchroner Ereignisse, einfach unabhängige Ereignisse
quelle
Synchronous Vs. Asynchrone Ereignisse
Einige Ereignishandler werden sofort aufgerufen, wenn das Ereignis eintritt. Diese werden als "synchrone" Ereignisse bezeichnet. Ein Beispiel ist DocumentNew. Es wird aufgerufen, sobald der Benutzer ein neues Dokument erstellt.
Einige Ereignisse werden jedoch kurz nach dem Eintreten des Ereignisses aufgerufen, normalerweise nach einer kurzen Leerlaufzeit. Diese werden als "asynchrone" Ereignisse bezeichnet. Sie sind asynchron, da dies Source Insight destabalisieren würde, wenn ein benutzerdefiniertes Makro genau zum Zeitpunkt des Ereignisses aufgerufen würde.
quelle
Wenn der Code synchron (oder synchronisiert) ist, bedeutet dies, dass jeder Code nacheinander ausgeführt wird und der nächste Code erst ausgeführt werden kann, wenn der vorherige abgeschlossen ist. Der meiste Code ist normalerweise synchron.
Wenn Code asynchron (oder asynchron ) ist, bedeutet dies, dass Code separat und unabhängig von anderem Code ausgeführt werden kann. Wenn sich in der Mitte einer Reihe von Synchronisierungscodes Async-Code befindet, wird der Async-Code im Kontext dieser speziellen Frage nur ausgeführt, wenn sein Ereignis ausgelöst wird, unabhängig davon, wo im Synchronisierungscode Sie ihn abgelegt haben. Es ist völlig unabhängig vom Synchronisierungscode und wird immer dann ausgeführt, wenn das Ereignis dies anzeigt, und nicht nur, wenn der vorherige Code ausgeführt wurde. Einige Beispiele hierfür sind Code, der in einem bestimmten Zeitintervall ausgeführt wird, nachdem eine Datei erfolgreich gespeichert wurde, nachdem eine Webanforderung gesendet wurde, wenn der Benutzer auf eine Schaltfläche klickt oder nachdem ein Bild geladen wurde.
quelle