Heim >Web-Frontend >Front-End-Fragen und Antworten >Ist Javascript Single-Threaded?
JavaScript ist Single-Threaded. Selbst wenn JavaScript über mehrere Kerne verfügt, kann es nur Aufgaben in einem einzigen Thread ausführen, der als Hauptthread bezeichnet wird. Der Hauptzweck von JavaScript besteht darin, mit Benutzern zu interagieren und das DOM zu betreiben. Es wird eine Menge Probleme mit sich bringen.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.
Als Browser-Skriptsprache besteht der Hauptzweck von JavaScript darin, mit Benutzern zu interagieren und das DOM zu manipulieren. Dies legt fest, dass es nur Single-Threaded sein kann, da es sonst zu sehr komplexen Synchronisationsproblemen kommt.
Ein Thread ist im Grunde ein einzelner Prozess, den ein Programm verwenden kann, um eine Aufgabe abzuschließen. Jeder Thread kann jeweils nur eine Aufgabe ausführen:
Task A --> Task B --> Task C
Jede Aufgabe wird nacheinander ausgeführt; eine Aufgabe muss abgeschlossen sein, bevor die nächste beginnen kann.
Wie bereits erwähnt, verfügen viele Computer mittlerweile über mehrere Kerne und können daher mehrere Vorgänge gleichzeitig ausführen. Programmiersprachen, die mehrere Threads unterstützen können, können mehrere Kerne verwenden, um mehrere Aufgaben gleichzeitig auszuführen:
Thread 1: Task A --> Task B Thread 2: Task C --> Task D
Traditionell ist JavaScript Single-Threaded. Selbst mit mehreren Kernen können Sie Aufgaben nur in einem einzigen Thread, dem sogenannten Hauptthread, ausführen lassen. Unser obiges Beispiel läuft so ab:
Main thread: Render circles to canvas --> Display alert()
Im Laufe der Zeit hat JavaScript einige Tools hinzugewonnen, um solche Probleme zu lösen. Mit Web-Workern können Sie einen Teil der JavaScript-Verarbeitung an einen separaten Thread (einen sogenannten Worker) senden, sodass Sie mehrere JavaScript-Blöcke gleichzeitig ausführen können. Normalerweise verwenden Sie einen Worker, um teure Prozesse im Hauptthread auszuführen, damit die Benutzerinteraktion nicht blockiert wird.
Main thread: Task A --> Task C Worker thread: Expensive task B
In diesem Sinne öffnen Sie erneut die JavaScript-Konsole Ihres Browsers und werfen einen Blick auf simple-sync-worker.html (um zu sehen, wie es in Echtzeit ausgeführt wird). Dies ist eine Neufassung des vorherigen Beispiels, das 10 Millionen Daten in einem separaten Arbeitsthread berechnet hat. Wenn Sie nun auf die Schaltfläche klicken, kann der Browser den Absatz anzeigen, bevor die Berechnung des Datums abgeschlossen ist. Der erste Vorgang blockiert den zweiten nicht mehr.
Ein Hauptmerkmal der JavaScript-Sprache ist, dass sie Single-Threaded ist, was bedeutet, dass sie jeweils nur eine Sache ausführen kann. Warum kann JavaScript also nicht mehrere Threads haben? Dadurch kann die Effizienz verbessert werden.
JavaScript ist je nach Verwendungszweck Single-Threaded. Als Browser-Skriptsprache besteht der Hauptzweck von JavaScript darin, mit Benutzern zu interagieren und das DOM zu manipulieren. Dies legt fest, dass es nur Single-Threaded sein kann, da es sonst zu sehr komplexen Synchronisationsproblemen kommt. Angenommen, JavaScript verfügt über zwei Threads gleichzeitig. Ein Thread fügt einem bestimmten DOM-Knoten Inhalte hinzu und der andere Thread löscht den Knoten. Welchen Thread sollte der Browser in diesem Fall verwenden?
Um Komplexität zu vermeiden, ist JavaScript seit seiner Geburt Single-Threaded. Dies ist zum Kernmerkmal dieser Sprache geworden und wird sich auch in Zukunft nicht ändern.
Um die Rechenleistung von Multi-Core-CPUs zu nutzen, schlägt HTML5 den Web Worker-Standard vor, der es JavaScript-Skripten ermöglicht, mehrere Threads zu erstellen, die untergeordneten Threads werden jedoch vollständig vom Haupt-Thread gesteuert und dürfen nicht ausgeführt werden das DOM. Daher ändert dieser neue Standard nichts an der Single-Threaded-Natur von JavaScript.
Verwandte Empfehlungen: Javascript-Lern-Tutorial
Das obige ist der detaillierte Inhalt vonIst Javascript Single-Threaded?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!