Heim  >  Artikel  >  Web-Frontend  >  Einführung in den asynchronen Ausführungsmechanismus von JavaScript

Einführung in den asynchronen Ausführungsmechanismus von JavaScript

高洛峰
高洛峰Original
2017-03-19 16:19:051217Durchsuche

----Der asynchrone Ausführungsmechanismus ist wie folgt:

1. Die linken und rechten Synchronisationsaufgaben werden im Hauptthread ausgeführt und bilden einen Ausführungsstapel

2 Zum Haupt-Thread-Wert gibt es auch eine Aufgabenwarteschlange. Solange die asynchrone Aufgabe ein laufendes Ergebnis hat, wird ein Ereignis in die Aufgabenwarteschlange gestellt

3. Sobald alle synchronen Aufgaben im Ausführungsstapel ausgeführt sind , liest das System die Aufgabenwarteschlange und entsprechend der auszuführenden Aufgabe. Die Aufgabe wird im Hauptthread platziert, und der Hauptthread wartet auf den -Status , tritt in den Ausführungsstapel ein und beginnt mit der Ausführung von

(Solange der Hauptthread leer ist, wird die Aufgabenwarteschlange gelesen, dies ist der JavaScript -Laufmechanismus, dieser Vorgang wird wiederholt)

4 Wiederholen Sie den obigen Vorgang Schritte im Hauptthread

----Warum JavaScript Single-Threaded ist:

1. Als Browser-Skriptsprache können Sie jeweils nur eine Sache ausführen Mehrere Threads können zu Konflikten führen, daher kann JavaScript nur Single-Threaded sein

----HTML5 Der Standard legt fest, dass der Mindestwert (kürzestes Intervall) des zweiten Parameters von setTimeout() darf nicht weniger als 4 Millisekunden betragen. Wenn er unter diesem Wert liegt, wird er automatisch erhöht. Zuvor haben ältere Browser das Mindestintervall auf 10 Millisekunden festgelegt. Darüber hinaus werden diese DOM-Änderungen (insbesondere solche, die das erneute Rendern von Seiten beinhalten) normalerweise nicht sofort, sondern alle 16 Millisekunden ausgeführt. Zu diesem Zeitpunkt ist der Effekt der Verwendung von requestAnimationFrame () besser als der von setTimeout ().

Es ist zu beachten, dass setTimeout() das Ereignis nur in die „Aufgabenwarteschlange“ einfügt. Der Hauptthread muss warten, bis die Ausführung des aktuellen Codes (Ausführungsstapels) abgeschlossen ist, bevor der Hauptthread seinen vorgesehenen Rückruffunktion. Wenn der aktuelle Code lange dauert, kann es lange dauern, sodass nicht garantiert werden kann, dass die Rückruffunktion zu dem von setTimeout () angegebenen Zeitpunkt ausgeführt wird.

----

„Aufgabenwarteschlange“ ist eine Ereigniswarteschlange (kann auch als Nachrichtenwarteschlange verstanden werden). Wenn das E/A-Gerät eine Aufgabe abschließt, wird sie der „Aufgabe“ hinzugefügt queue“ Ein Ereignis, das angibt, dass verwandte asynchrone Aufgaben in den „Ausführungsstapel“ gelangen können. Der Hauptthread liest die „Aufgabenwarteschlange“, was bedeutet, dass die darin enthaltenen Ereignisse gelesen werden.

Ereignisse in der „Aufgabenwarteschlange“ umfassen neben IO-Geräteereignissen auch einige benutzergenerierte Ereignisse (z. B. Mausklicks, Seitenscrollen usw.). Solange die Rückruffunktion angegeben ist, werden diese Ereignisse bei ihrem Auftreten in die „Aufgabenwarteschlange“ eingegeben und warten auf das Lesen durch den Hauptthread.

Die sogenannte „Rückruffunktion“ (Callback) ist der Code, der vom Hauptthread aufgehängt wird. Asynchrone Aufgaben müssen eine Rückruffunktion angeben. Wenn der Hauptthread mit der Ausführung einer asynchronen Aufgabe beginnt, wird die entsprechende Rückruffunktion ausgeführt.

„Aufgabenwarteschlange“ ist eine First-In-First-Out-Datenstruktur. Die zuerst eingestuften Ereignisse werden zuerst vom Hauptthread gelesen. Der Lesevorgang des Hauptthreads erfolgt grundsätzlich automatisch. Sobald der Ausführungsstapel gelöscht wird, gelangt das erste Ereignis in der „Aufgabenwarteschlange“ automatisch in den Hauptthread. Aufgrund der später erwähnten Funktion „

Timer“ muss der Hauptthread jedoch zunächst die Ausführungszeit überprüfen. Bestimmte Ereignisse können erst nach der angegebenen Zeit zum Hauptthread zurückkehren.

----Es wird sofort ausgeführt, wenn kein Code in JavaScript vorhanden ist. Es wird so schnell wie möglich ausgeführt, wenn der Prozess inaktiv ist

Das obige ist der detaillierte Inhalt vonEinführung in den asynchronen Ausführungsmechanismus von JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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