Heim  >  Artikel  >  Backend-Entwicklung  >  Was sind die Unterschiede zwischen Opcode-Cache und JIT?

Was sind die Unterschiede zwischen Opcode-Cache und JIT?

little bottle
little bottlenach vorne
2019-04-26 16:30:402431Durchsuche

In diesem Artikel geht es hauptsächlich um den Unterschied zwischen Opcode-Cache und JIT. Interessierte Freunde können davon erfahren.

Um den Unterschied zwischen Opcode-Cache und JIT zu erklären, müssen Sie zunächst den Unterschied zwischen Bytecode, auch Zwischencode und Maschinencode genannt, verstehen.

Opcode (Opcode)

Eine Maschinenanweisung. Zum Beispiel eine Operationsanweisung, die in unserer Assemblersprache geschrieben ist.

Maschinencode

Wissenschaftlicher Name für maschinensprachliche Anweisungen, manchmal auch Native Code genannt, sind Daten, die direkt von der CPU des Computers interpretiert werden können .

Maschinencode ist der Maschinenbefehl, den die Computer-CPU direkt liest und ausführt. Er läuft am schnellsten, ist aber sehr unklar und schwer zu verstehen und schwer zu schreiben und für normale Praktiker nicht zugänglich.

Und der Maschinencode unterstützt nicht plattformübergreifend. Vereinfacht gesagt ist der Maschinencode, der von verschiedenen CPUs verwendet wird, unterschiedlich.

Bytecode (Bytecode)

ist eine Binärdatei, die ein ausführbares Programm enthält und aus einer Folge von Operationscode/Datenpaaren besteht. Bytecode ist eine Art Zwischencode , der abstrakter als Maschinencode ist und von einem Interpreter übersetzt werden muss, bevor er zum Zwischencode des Maschinencodes werden kann.

Bytecode wird hauptsächlich zur Implementierung spezifischer Softwareoperationen und Softwareumgebungen verwendet, unabhängig von der Hardwareumgebung. Die Art und Weise, wie Bytecode implementiert wird, erfolgt über einen Compiler und eine virtuelle Maschine. Der Compiler kompiliert den Quellcode in Bytecode und die virtuelle Maschine auf einer bestimmten Plattform übersetzt den Bytecode in Anweisungen, die direkt ausgeführt werden können. Die typische Anwendung von Bytecode ist Java-Bytecode, und PHP ist eine Binärdatei, die aus einer Reihe von Opcodes besteht.

Der Bytecode wird während der Laufzeit durch eine virtuelle Maschine (JVM von JAVA, virtuelle Zend-Maschine von PHP) konvertiert, um Maschinenanweisungen zu generieren, damit er plattformübergreifend besser ausgeführt werden kann.

Bytecode ist ein Binärcode (Datei) in einem Zwischenzustand (Zwischencode). Es benötigt einen Interpreter, um es in Maschinencode zu übersetzen.

Durch die Einführung können wir sehen, dass die CPU nur Maschinencode ausführen kann. Um jedoch Anwendungen auf Hardwareplattformen zu implementieren, haben wir eine virtuelle Maschine für verschiedene Programmiersprachen implementiert, und diese virtuelle Maschine konvertiert den Code, den wir verwenden geschrieben In Binärcode (Datei) kompiliert, wird dieser Binärcode als Bytecode oder auch als Zwischencode bezeichnet. Der von der virtuellen Zend-Maschine kompilierte Bytecode wird Opcode genannt (eigentlich eine Reihe von Opcodes).

Als nächstes stellen wir Opcode-Cache und JIT vor.

JIT

Derzeit hat PHP die JIT-Technologie nicht eingeführt, aber Bruder Niao sagte, dass die nächste große Version von PHP möglicherweise neue JIT-Funktionen bringen könnte. Warten wir ab! JIT ist jedoch eine sehr ausgereifte Technologie im JAVA-Ökosystem. Lassen Sie uns also über JAVAs JIT sprechen.

JIT ist die Abkürzung für Just in Time, also Just-in-Time-Compiler-Compiler. Der Einsatz der Just-in-Time-Compiler-Technologie kann die Ausführung von Java-Programmen beschleunigen.

Normalerweise wird Javac verwendet, um den Programmquellcode zu kompilieren und in Java-Bytecode umzuwandeln. Die JVM übersetzt den Bytecode in entsprechende Maschinenanweisungen (Maschinencode), liest sie einzeln ein und interpretiert die Übersetzung einzeln eins. Offensichtlich ist seine Ausführungsgeschwindigkeit nach der Interpretation und Ausführung zwangsläufig viel langsamer als die des ausführbaren binären Bytecode-Programms. Um die Ausführungsgeschwindigkeit zu erhöhen, wird die JIT-Technologie eingeführt.

JIT speichert den übersetzten Maschinencode für die nächste Verwendung (es muss ein LRU-ähnlicher Algorithmus vorhanden sein). Es ist ersichtlich, dass die Aufgabe von JIT sehr einfach ist, nämlich den aus dem Zwischencode übersetzten Maschinencode vorübergehend zu speichern (wie lange und wie ausgewählt werden soll, wird hier nicht vorgestellt), damit der Maschinencode wieder verwendet werden kann , es wird eine Übersetzung weniger geben.

Opcode-Cache

Wie Sie am Namen erkennen können, werden Zwischencodes (Binärdateien, die aus einer Reihe von Opcodes bestehen) zwischengespeichert. Um die offizielle Website zu zitieren: OPcache verbessert die PHP-Leistung, indem es vorkompiliert speichert Skript-Bytecode im gemeinsam genutzten Speicher, wodurch PHP nicht mehr bei jeder Anfrage Skripte laden und analysieren muss.

Warum brauchen Sie also einen Opcode-Cache?

Der Lebenszyklus von PHP-Code

Von Der PHP-Parser führt ein PHP-Skript aus und gibt den Skriptinhalt aus. Er durchläuft hauptsächlich fünf Schritte: Die Zend-Engine liest die Datei, lexikalische Analyse, Syntaxanalyse und semantische Analyse, erstellt den Zwischencode und führt den Zwischencode aus. wie unten gezeigt

Jedes Mal, wenn das PHP-Skript angefordert wird, werden die oben genannten Schritte ausgeführt. Wenn sich der PHP-Code nicht ändert, ändert sich auch der Opcode nicht. Offensichtlich ist es nicht erforderlich, den Opcode jedes Mal zu generieren, sodass wir den kompilierten Opcode zwischenspeichern können In Zukunft können wir direkt auf den kompilierten Opcode zugreifen.

Das Flussdiagramm nach der Aktivierung des Opcode-Caching sieht wie folgt aus:

Zusammenfassung

Beschreiben Sie einfach, dass JAVAs JIT zum Zwischenspeichern des von der CPU ausgeführten Maschinencodes und der Opcode-Cache zum Zwischenspeichern der virtuellen Zend-Umgebung verwendet wird Maschine. Zwischencode.

Verwandte Tutorials: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen Opcode-Cache und JIT?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen