Heim  >  Artikel  >  Web-Frontend  >  Welchen Treiber verwendet Javascript?

Welchen Treiber verwendet Javascript?

青灯夜游
青灯夜游Original
2022-02-07 11:18:482198Durchsuche

Javascript ist ereignisgesteuert. JavaScript ist eine objekt- und ereignisgesteuerte Skriptsprache mit Sicherheitsfunktionen. Sie verwendet einen ereignisgesteuerten Mechanismus, um auf Benutzeroperationen zu reagieren Es.

Welchen Treiber verwendet Javascript?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

JavaScript ist eine objekt- und ereignisgesteuerte Skriptsprache mit Sicherheitsfunktionen.

Dieser Artikel erläutert den ereignisgesteuerten Mechanismus von JavaScript auf der Browserseite bzw. der Serverseite (node.js) und fügt einige asynchrone Programmierbeispiele hinzu, um das Verständnis zu vertiefen.

Der ereignisgesteuerte Mechanismus von JavaScript auf der Browserseite

Zunächst läuft JavaScript in einem einzigen Thread auf der Browserseite, der vom Browser bestimmt wird. Dies dient dazu, Konflikte zu vermeiden, wenn mehrere Threads unterschiedliche Aufgaben ausführen . Mit anderen Worten: Der von uns geschriebene Javascript-Code läuft nur in einem Thread, dem sogenannten Hauptthread (HTML5 bietet eine Web-Worker-API, die es dem Browser ermöglicht, einen Thread zu öffnen, um komplexere und zeitaufwändigere Javascript-Aufgaben auszuführen, aber dieser Thread ist immer noch vorhanden unterliegen der Haupt-Thread-Kontrolle). Wenn wir für einen einzelnen Thread einige „Ruhe“-Vorgänge wie:

var now = + new Date()while (+new Date() <p> ausführen, wird der Thread innerhalb von fast einer Sekunde blockiert und kann die folgenden Aufgaben nicht mehr ausführen. </p><p>Es gibt auch einige Vorgänge wie das Abrufen von Remote-Daten, E/A-Vorgänge usw., die sehr zeitaufwändig sind. Wenn die Synchronisierungsmethode verwendet wird, wird der Prozess aufgrund der zeitaufwändigen Ausführung dieser Vorgänge nur warten Wie oben und unten können Aufgaben nur warten, was nicht effizient ist. Um das durch einzelne Threads verursachte Blockierungsproblem zu lösen, haben viele Betriebssysteme einen asynchronen Programmiermechanismus implementiert. Dies wird auch in <strong>Browsern</strong> durchgeführt. Die Hauptleistungen sind wie folgt: </p>
  • Javascript-Code nur im Hauptthread ausführen

  • Hauptthread Es tritt in die Ereignisschleife ein, sobald es gestartet wird. Der gesamte Prozess ist eine kontinuierliche Schleife, bei der die Rückruffunktion ständig ausgeführt wird. Bei Netzwerkanfragen, E/A-Vorgängen usw. öffnet der Browser eine separate Schleife Arbeitsthread, um es zu verarbeiten und entsprechende Beobachtungen einzurichten, oder dann sofort zum Hauptthread zurückzukehren, um die folgenden Aufgaben auszuführen

  • Nachdem der vom Browser geöffnete Thread die Aufgabe verarbeitet hat oder ein überwachtes Ereignis hat , Es verwendet die erhaltenen Daten (oder Eingaben), um ein Ereignis zu bilden und es in der entsprechenden Beobachtung zu platzieren. In der Ereigniswarteschlange des Autors befindet sich die Ereigniswarteschlange im Hauptthread. Der Hauptthread führt eine kontinuierliche Schleife durch und überprüft ständig die Ereigniswarteschlange und führt die den Ereignissen entsprechenden Rückruffunktionen nacheinander aus, indem die Ereignisse durchlaufen werden. Hinweis: Im Bild unten wird die Nachrichtenwarteschlange im Hauptthread gespeichert Egal wo Sie die Anfrage schreiben, sie befindet sich immer in der Callback-Funktion. Da der ereignisgesteuerte Mechanismus alles in Ereignisse abstrahiert, ist der Beginn der Codeausführung ebenfalls ein Ereignis und die Rückruffunktion wird implizit aufgerufen. Durch Aufrufen der Rückruffunktion wird die Ausführung des Codes gestartet. Dann kehrt der Hauptthread unmittelbar nach dem Initiieren der asynchronen Aufgabe zurück und führt weiterhin den folgenden Code in der Rückruffunktion aus, die dem „Code-Startereignis“ entspricht. Wenn die Rückruffunktion abgeschlossen ist, wird das nächste Ereignis ausgeführt. Während dieser Zeit schließt der Ajax-Thread die Anforderung ab und sendet dann das Anforderungsabschlussereignis (einschließlich der zurückgegebenen Daten) an das Ende der Ereigniswarteschlange, um auf die Verarbeitung zu warten. Wenn der Hauptthread dieses Ereignis ausführt, wird dies von der angegebenen Rückruffunktion ausgeführt ausgeführt werden.

  • Wahrscheinlich. Wenn Sie Fragen haben, lesen Sie bitte unten. Lassen Sie uns über den spezifischen Prozess und Mechanismus sprechen, der auf dem Code basiert.
  • console.log("开始");setTimeout(function(){
      console.log(&#39;延迟执行的&#39;)
    }, 1000);setTimeout(function(){
      console.log(&#39;立即执行的&#39;)
    }, 0);
    console.log(&#39;结束&#39;) //开始 结束 立即执行的 延迟执行的

    watcher-Mechanismus
  • watcher, Beobachter, ist ein wichtiger Mechanismus für ereignisgesteuerte Systeme.

  • setTimeout wird als Timer bezeichnet, bei dem es sich um eine vom Browser bereitgestellte API handelt. Immer wenn Sie einen Timer verwenden, legt diese Funktion einen Beobachter, einen Beobachter, fest. Der Hauptthread wird hier weiterlaufen und „durchlaufen“, um die Zeit zu überprüfen. Wenn der Hauptthread überprüft, ob das Zeitintervall den Anforderungen entspricht, wird ein Timer-Ereignis generiert und der Ereigniswarteschlange watcher hinzugefügt und eine Rückruffunktion wird ausgeführt. Daher wird beim Ausführen von setTimeout nur dann eine Nachricht zum Aufrufen der Rückruffunktion generiert und zur Ereigniswarteschlange hinzugefügt. Daher wird die Rückruffunktion nicht unbedingt zum angegebenen Zeitpunkt aufgerufen wie viele vorherige Ereignisse auf die Verarbeitung warten.

Ich habe gerade über Timer-Beobachter sowie E/A-Beobachter, Netzwerkanforderungsbeobachter, Mausereignisbeobachter, Tastaturereignisbeobachter usw. gesprochen. Wir stoßen häufig auf Ereignisüberwachungsfunktionen, die Sie auffordern, eine Rückruffunktion zu binden, diese Art des Abhörens Die Funktion legt normalerweise einen Watcher fest, und von anderen Threads generierte Ereignisse werden ebenfalls in die Ereigniswarteschlange des entsprechenden Watchers gestellt, sodass dies bei jedem Watcher der Fall ist watcher,其他线程产生的事件也会放到相应watcher的事件队列中,因此每个watcher产生自己的事件队列主线程在循环的时候,实际上是在依次调用这些watcher,检查每个watcher的事件队列,有事件就执行相应的回调。

Welchen Treiber verwendet Javascript?

它的过程就是 :

  • 进程一启动就进入事件循环

  • 有监听就添加watcher

  • 遍历watcher下的事件队列

  • 执行下一个watcher

事件驱动机制,它会有各种各样的事件,大量的事件,它所做的一切都跟处理事件有关。但并不是所有的事件都有watcher,如果都有,主进程任务会变得非常繁重,况且有些事件我们并不关心,例如你只写了一个定时器,代表你关心这个事件,那么点击事件、网络请求事件就不用关心,因为你根本就没写啊,也就没有watcherErstellen Sie eine eigene Ereigniswarteschlange

.

Wenn sich der Hauptthread in einer Schleife befindet, ruft er tatsächlich diese Watcher nacheinander auf, überprüft die Ereigniswarteschlange jedes Watchers und führt den entsprechenden Rückruf aus, wenn ein Ereignis vorliegt.

Welchen Treiber verwendet Javascript?

Der Prozess ist:
  • Sobald der Prozess startet, tritt er in die Ereignisschleife ein
  • Wenn ein Monitor vorhanden ist, fügen Sie watcher hinzu.

  • Durchlaufen Sie die Ereigniswarteschlange unter watcher

Führen Sie den nächsten watcher

ereignisgesteuerten Mechanismus aus. Es gibt verschiedene Ereignisse, eine große Anzahl von Ereignissen und alles, was es tut, hängt mit der Verarbeitung zusammen Ereignisse. Aber nicht alle Ereignisse haben einen watcher. Wenn dies der Fall ist, wird die Aufgabe des Hauptprozesses sehr umfangreich. Außerdem sind uns einige Ereignisse egal, wenn Sie beispielsweise nur einen Timer schreiben. Das bedeutet, dass Sie sich für dieses Ereignis nicht um Klickereignisse und Netzwerkanforderungsereignisse kümmern müssen, da Sie diese überhaupt nicht geschrieben haben, sodass es keinen Watcher gibt.

🎜Javascript-ereignisgesteuerter Mechanismus auf node.js🎜🎜🎜javascript Der ereignisgesteuerte Mechanismus auf node.js ist ungefähr derselbe wie auf der Browserseite. Sie sind beide Single-Threaded und verfügen über Ereignisschleifen Im Browser ist der Ereignisschleifenmechanismus auf dem Knoten ungefähr derselbe. Der Unterschied besteht darin, dass sich der Executor anders verhält, da er sich auf unterschiedliche Aufgaben konzentriert: 🎜🎜🎜🎜Der knotenseitige asynchrone Mechanismus und die Ereignisschleife sind reiner. Um eine hohe Parallelität zu unterstützen, sind fast alle APIs des Knotens asynchron, wodurch andere Threads des Betriebssystems vollständig genutzt werden, um die Ausführung von Aufgaben zu unterstützen, und der Hauptthread ist nur für den Ereignisverbrauch verantwortlich. Wenn der Webserver beispielsweise eine Anfrage empfängt, schließt der Knoten diese, übergibt sie zur Verarbeitung an andere Threads und bedient dann die nächste Webanfrage. Wenn die Anforderung abgeschlossen ist, wird sie in die Verarbeitungswarteschlange gestellt. Wenn der Kopf der Warteschlange erreicht ist, wird das Ergebnis an den Benutzer zurückgegeben. In diesem Fall akzeptiert der Webserver immer Anfragen, ohne auf Lese- oder Schreibvorgänge zu warten. Diese nicht blockierende I/O-Leistung ist sehr hoch. 🎜🎜🎜🎜🎜🎜Auf der Browserseite ist der Browser für die Ausführung der BOM-API, die Verwaltung von Threads, die Verarbeitung von Benutzereingabeinformationen usw. verantwortlich. Auf dem Knoten ist libuv, eine Kernbibliothek des Knotens, für die Ausführung der Knoten-API und die Verwaltung verantwortlich Hauptthread (mit Javascript) und Arbeitsthreads usw. 🎜🎜🎜🎜Da sich Front-End und Back-End auf unterschiedliche Dinge konzentrieren, konzentrieren sich auch die APIs der beiden Betriebsumgebungen auf unterschiedliche Aufgaben

Das obige ist der detaillierte Inhalt vonWelchen Treiber verwendet 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