Heim > Web-Frontend > js-Tutorial > Wie macht JavaScript Rückrufe tatsächlich asynchron?

Wie macht JavaScript Rückrufe tatsächlich asynchron?

DDD
Freigeben: 2024-11-19 14:44:02
Original
556 Leute haben es durchsucht

 How Does JavaScript Actually Make Callbacks Asynchronous?

Erforschung der Mechanik asynchroner Rückrufe

Im Bereich der Programmierung spielen Rückrufe eine entscheidende Rolle bei der asynchronen Ausführung. Obwohl allgemein bekannt ist, dass Rückrufe asynchron ablaufen, bleibt der zugrunde liegende Mechanismus hinter diesem Verhalten für viele unklar. Dieser Artikel befasst sich mit den Syntax- und Implementierungsdetails, die eine asynchrone Ausführung in der Callback-basierten Programmierung ermöglichen.

Callback-Syntax: Keine implizite Angabe

Entgegen der landläufigen Meinung gibt es keine spezifischen syntaktischen Elemente, die vorschreiben, ob eine Funktion asynchron oder synchron ausgeführt wird. Rückrufe können in beiden Modi funktionieren, wie in den folgenden Fällen veranschaulicht:

Asynchron:

setTimeout(function(){
    console.log("this is async");
}, 100);
Nach dem Login kopieren

Synchron:

an_array.forEach(function(x){
    console.log("this is sync");
});
Nach dem Login kopieren

Enthüllung von Asynchronous Ausführung

JavaScript selbst verfügt über keinen inhärenten Mechanismus zur asynchronen Ausführung von Funktionen. Um dieses Verhalten zu erreichen, kann einer von zwei Ansätzen gewählt werden:

  1. Verwenden Sie externe asynchrone Funktionen wie setTimeout oder Web Worker, um die Logik zu verwalten.
  2. Zurückgreifen auf die C-Ebene Implementierung.

C-codierte Funktionen wie setTimeout basieren auf ausgefeilten Techniken, um die asynchrone Ausführung zu erleichtern. Der primär beteiligte Mechanismus ist die Ereignisschleife.

Die Ereignisschleife: Orchestrator der Asynchronität

Im Kern jedes Webbrowsers liegt die Ereignisschleife, ein Überbleibsel asynchroner Netzwerkprotokolle, die in den frühen Tagen des Internets entstanden sind. Dieser Mechanismus ermöglicht es dem Browser, mehrere E/A-Anfragen gleichzeitig zu bewältigen, ohne auf zusätzliche Threads zurückgreifen zu müssen.

Die Ereignisschleife basiert auf einem zentralen Systemaufruf in C, der als select() (oder ähnliche Varianten) bekannt ist:

select (max, readlist, writelist, errlist, timeout)
Nach dem Login kopieren

select() ermöglicht es dem System, zahlreiche I/O-Vorgänge gleichzeitig zu überwachen. Wenn Daten auf einem der ausgewählten E/A-Kanäle verfügbar werden, kehrt die Funktion zurück und signalisiert dem Browser, die entsprechende Rückrufausführung zu initiieren.

Die Rolle und Implementierung des Browsers

Wenn eine Rückruffunktion registriert wird, speichert der JavaScript-Interpreter sie und ruft gleichzeitig die Funktion select() auf. Bei seiner Rückkehr korreliert der Interpreter Rückrufe mit bestimmten E/A-Kanälen und löst deren Ausführung aus.

select() ermöglicht es dem Browser außerdem, den Aufrufzeitpunkt von Rückrufen durch Zeitüberschreitungen zu steuern. Durch die sorgfältige Regulierung des an select() übergebenen Timeout-Arguments können Rückrufe für die Ausführung in vorgegebenen Intervallen geplant werden. Dies bildet die Grundlage für Funktionen wie setTimeout und setInterval.

Abgesehen von der Ereignisschleife setzen Webbrowser Web-Worker ein, um die asynchrone Ausführung von JavaScript-Code in separaten Threads zu ermöglichen. Diese Worker müssen sich jedoch weiterhin über select() mit der Hauptereignisschleife verbinden, um zurück zum Hauptthread zu kommunizieren.

Node.js und C Threads: Eine alternative Perspektive

Node.js nutzt wie Webbrowser Threading für Datei-/Festplatten-E/A-Vorgänge. Nach Abschluss dieser Aufgaben kommunizieren die Threads mit der Node.js-Ereignisschleife und veranlassen die Ausführung der zugehörigen Rückrufe.

Fazit

Das Konzept der Asynchronität Die Ausführung in der Callback-basierten Programmierung ist nicht direkt aus der Syntax selbst erkennbar. Dies ist ein Ergebnis zugrunde liegender Mechanismen, vor allem der Ereignisschleife und ihrer Interaktion mit C-Level-Funktionen wie select(). Die Ereignisschleife ermöglicht es Browsern, mehrere E/A-Vorgänge gleichzeitig abzuwickeln und so eine nicht blockierende Ausführung von Rückrufen sicherzustellen. Das Verständnis dieser Prinzipien ist entscheidend, um die Feinheiten der asynchronen Programmierung und ihrer Anwendungen auf verschiedenen Plattformen zu verstehen.

Das obige ist der detaillierte Inhalt vonWie macht JavaScript Rückrufe tatsächlich asynchron?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage