Ich bin etwas verwirrt, um den Unterschied zwischen Asynchronen Calls und Callbacks zu verstehen.
Ich habe diese Posts gelesen, die über CallBacks lehren , aber keine der Antworten adressiert wie sie sich von asynchronen Calls unterscheidet .
Ist das Callbacks = Lambda-Ausdrücke ?
Callbacks laufen in einem anderen Thread?
Kann jemand das mit einfachem Englisch erklären?
Sehr einfach, ein Callback muss nicht asynchron sein.
Synchron:
Wenn ein API-Aufruf synchron ist, bedeutet dies, dass die Codeausführung ausgeführt wird Blockieren (oder warten), bis der API-Aufruf zurückgegeben wird, bevor Sie fortfahren. Dies bedeutet, dass Ihre Anwendung bis eine Antwort von der API zurückgegeben wird wird nicht weiter ausgeführt, was vom Benutzer als wahrgenommen werden könnte Latenz oder Leistungsverzögerung in Ihrer App Einen API-Aufruf tätigen Synchron kann es aber von Vorteil sein, wenn dort Code in deiner App steht das wird nur ordnungsgemäß ausgeführt, sobald die API-Antwort empfangen wird.
Asynchron:
Asynchrone Aufrufe blockieren nicht (oder warten), bis der API-Aufruf zurückgegeben wird vom Server. Die Ausführung wird in Ihrem Programm fortgesetzt, und wenn die Call Returns vom Server, eine "Callback" -Funktion wird ausgeführt.
In Java, C und C # sind "Rückrufe" normalerweise synchron (in Bezug auf eine "Hauptereignisschleife").
Andererseits sind Callbacks in Javascript normalerweise asynchron - Sie übergeben eine Funktion, die aufgerufen wird ... aber andere Ereignisse werden weiter verarbeitet, bis der Callback aufgerufen wird.
Wenn es Ihnen egal ist, welche Javascript-Ereignisse in welcher Reihenfolge auftreten - großartig. Ansonsten ist ein sehr mächtiger Mechanismus zur Verwaltung von asynchronem Verhalten in Javascript die Verwendung von "Versprechungen":
PS: Um Ihre zusätzlichen Fragen zu beantworten:
Ja, ein Rückruf kann ein Lambda sein - aber es ist keine Voraussetzung.
In Javascript wird fast jeder Callback eine "anonyme Funktion" sein (im Grunde ein "Lambda-Ausdruck").
Ja, Callbacks können von einem anderen Thread aufgerufen werden - aber es ist sicherlich keine Voraussetzung.
Callbacks können auch einen Thread spawnen (und tun dies oft auch) (wodurch sie sich selbst "asynchron" machen).
'Ich hoffe, das hilft
================================================== ======================
Hallo, schon wieder:
F: @ paulsm4 kannst du bitte mit einem Beispiel den Rückruf erklären und asynchroner Aufruf funktioniert im Ausführungsfluss? Das wird sein sehr hilfreich
Zuerst müssen wir uns auf eine Definition für "Rückruf" einigen. Hier ist ein guter:
In der Computerprogrammierung ist ein Callback ein ausführbarer Code, der wird als Argument an anderen Code übergeben, von dem erwartet wird, dass er zurückruft (Ausführen) das Argument zu einem geeigneten Zeitpunkt. Die Invokation kann sein sofort wie bei einem synchronen Rückruf oder später Zeit wie in einem asynchronen Rückruf .
Wir müssen auch "synchron" und "asynchron" definieren. Grundsätzlich - wenn ein Callback alles macht, bevor es zum Aufrufer zurückkehrt, ist es "synchron". Wenn es unmittelbar nach dem Aufruf an den Aufrufer zurückgegeben werden kann - und der Aufrufer und der Rückruf parallel arbeiten können -, ist es "asynchron".
Das Problem mit synchronen Callbacks ist, dass sie scheinbar "hängen". Das Problem mit asynchronen Rückrufen besteht darin, dass Sie die Kontrolle über das "Bestellen" verlieren können - Sie können nicht unbedingt garantieren, dass "A" vor "B" auftritt.
Häufige Beispiele für Rückrufe sind:
a) ein Knopfdruck-Handler (jeder andere "Knopf" hat eine andere "Antwort"). Diese werden normalerweise als "asynchrony" (durch die Hauptereignisschleife der GUI) aufgerufen.
b) eine Sortier- "Vergleichs" -Funktion (so kann eine gewöhnliche "sort ()" -Funktion verschiedene Datentypen verarbeiten). Diese werden normalerweise "synchron" aufgerufen (direkt von Ihrem Programm aufgerufen).
Ein Betonbeispiel:
a) Ich habe ein "C" Sprachprogramm mit einer "print ()" Funktion.
b) "print ()" verwendet einen von drei Callbacks: "PrintHP ()", "PrintCanon ()" und "PrintPDF ()".
c) "PrintPDF ()" ruft eine Bibliothek auf, um meine Daten in PDF zu rendern. Es ist synchron - das Programm kehrt nicht von "print ()" zurück, bis das PDF-Rendering abgeschlossen ist. Es geht normalerweise ziemlich schnell, also gibt es kein Problem.
d) Ich habe "PrintHP ()" und "PrintCanon ()" codiert, um Threads zu erzeugen, um die I / O für den physischen Drucker auszuführen. "Print ()" wird beendet, sobald der Thread erstellt wurde. Das eigentliche "Drucken" läuft parallel zur Programmausführung ab. Diese beiden Rückrufe sind "asynchron".
F: Sinn machen? Hilft das?
Sie sind ziemlich ähnlich, aber das ist nur mho.
Wenn Sie Rückrufe verwenden, geben Sie an, auf welche Methode Sie zurückgerufen werden sollen, und Sie verlassen sich auf die Methoden, die Sie anrufen, um Sie zurückzurufen. Sie können Ihren Rückruf festlegen, um überall zu landen, und Sie werden nicht garantiert zurückgerufen werden.
Bei der asynchronen Programmierung sollte sich der Aufrufstapel wie bei der normalen synchronen Programmierung in die Startposition abwickeln.
Vorbehalt: Ich denke speziell an die Funktionalität C # erwarten, da es andere asynchrone Techniken gibt.
Tags und Links asynchronous callback