国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Inhaltsverzeichnis
JIT von PHP 8
Wie wird PHP-Code ausgeführt?
Was es bewirkt, ist das Hinzufügen einer Speicher-Shared-Cache-Ebene zu Opcodes. Seine Aufgabe besteht darin, neu generierte Opcodes aus dem AST zu extrahieren und zwischenzuspeichern, sodass die Schritte Lexing/Tokenisierung und Parsing w?hrend der Ausführung übersprungen werden k?nnen.
Wenn die Opcache-Erweiterung Opcodes schneller abrufen und direkt an die Zend-VM übertragen kann, erm?glicht das JIT die Ausführung ohne Verwendung der Zend-VM.
Wie funktioniert die Just-In-Time-Kompilierung?
Ihre Leistungssteigerung wird also wahrscheinlich nicht riesig sein
Heim Backend-Entwicklung PHP8 Ein detaillierter Blick auf JIT in PHP 8

Ein detaillierter Blick auf JIT in PHP 8

Apr 25, 2022 pm 08:46 PM
php php8

Dieser Artikel führt Sie durch die JIT in PHP 8 und spricht darüber, wie JIT am Interpretationsprozess beteiligt ist. Ich hoffe, dass er für alle hilfreich ist!

Ein detaillierter Blick auf JIT in PHP 8

Der JIT-Compiler (Just In Time) von PHP 8 wird als Erweiterung in PHP integriert. Die Opcache-Erweiterung wird verwendet, um bestimmte Opcodes zur Laufzeit direkt in CPU-Anweisungen umzuwandeln.

Das bedeutet, dass Zend VM nach der Verwendung von JIT bestimmte Opcodes nicht interpretieren muss und diese Anweisungen direkt als Anweisungen auf CPU-Ebene ausgeführt werden.

JIT von PHP 8

Die Auswirkungen des PHP 8 Just In Time (JIT)-Compilers sind unbestreitbar. Bisher habe ich jedoch festgestellt, dass sehr wenig darüber bekannt ist, was JIT tun soll.

Nach langem Recherchieren und Aufgeben habe ich beschlossen, den PHP-Quellcode selbst zu überprüfen. Durch die Kombination einiger meiner Kenntnisse der C-Sprache und all der verstreuten Informationen, die ich bisher gesammelt habe, habe ich diesen Artikel verfasst, der Ihnen hoffentlich dabei helfen wird, PHPs JIT besser zu verstehen.

Um es einfach auszudrücken: Wenn das JIT wie erwartet funktioniert, wird Ihr Code nicht über die Zend-VM ausgeführt, sondern direkt als Satz von Anweisungen auf CPU-Ebene.

Das ist die ganze Idee.

Aber um es besser zu verstehen, müssen wir uns überlegen, wie PHP intern funktioniert. Nicht sehr kompliziert, bedarf aber einer Einführung.

Ich habe einen Blogbeitrag geschrieben, der einen groben überblick über die Funktionsweise von PHP gibt. Wenn Sie der Meinung sind, dass dieser Beitrag zu viel ist, schauen Sie sich einfach einen anderen an und kommen Sie sp?ter noch einmal vorbei. Die Dinge werden verst?ndlicher.

Wie wird PHP-Code ausgeführt?

Wie wir alle wissen, ist PHP eine interpretierte Sprache, aber was bedeutet dieser Satz selbst?

Jedes Mal, wenn Sie PHP-Code (Befehlszeilenskript oder WEB-Anwendung) ausführen, muss dieser den PHP-Interpreter durchlaufen. Am h?ufigsten werden die PHP-FPM- und CLI-Interpreter verwendet.

Die Aufgabe des Interpreters ist einfach: PHP-Code empfangen, interpretieren und das Ergebnis zurückgeben.

Allgemein interpretierte Sprachen folgen diesem Prozess. Bei einigen Sprachen entfallen m?glicherweise einige Schritte, die Grundidee ist jedoch dieselbe. In PHP ist der Prozess wie folgt:

  • liest den PHP-Code und interpretiert ihn als eine Reihe von Schlüsselw?rtern, sogenannte Tokens. Durch diesen Vorgang wei? der Interpreter, welcher Code in jedem Programm geschrieben wurde. Dieser Schritt wird Lexing oder Tokenisieren genannt.

  • Nachdem der PHP-Interpreter die Token-Sammlung erhalten hat, versucht er, sie zu analysieren. Ein abstrakter Syntaxbaum (AST) wird durch einen Prozess namens ?Parsing“ generiert. Hier ist AST eine Reihe von Knoten, die darstellen, welche Operationen ausgeführt werden sollen. Beispielsweise bedeutet ?echo 1 + 1“ tats?chlich ?das Ergebnis von 1 + 1 drucken“ oder genauer gesagt ?eine Operation drucken, diese Operation ist 1 + 1“.

  • Mit AST ist es einfacher, Abl?ufe und Priorit?ten zu verstehen. Um einen abstrakten Syntaxbaum in eine von der CPU ausführbare Operation umzuwandeln, ist ein übergangsausdruck (IR) erforderlich, den wir in PHP Opcodes nennen. Der Prozess der Konvertierung von ASTs in Opcodes wird ?Kompilierung“ genannt.
  • Mit Opcodes kommt jetzt der spa?ige Teil:

    Ausführen
  • des Codes! PHP verfügt über eine Engine namens Zend VM, die eine Reihe von Opcodes empfangen und ausführen kann. Nachdem alle Opcodes ausgeführt wurden, beendet Zend VM das Programm.
  • Dieses Bild kann es für Sie klarer machen:

Eine vereinfachte Version der übersicht über den PHP-Interpretationsprozess.

Ein detaillierter Blick auf JIT in PHP 8Wie Sie sehen k?nnen. Hier ist eine Frage: Auch wenn sich der PHP-Code nicht ge?ndert hat, wird dieser Prozess bei jeder Ausführung befolgt?

Lassen Sie uns einen Blick zurück auf Opcodes werfen. Das ist richtig! Aus diesem Grund gibt es die

Opcache-Erweiterung

.

Opcache-ErweiterungDie Opcache-Erweiterung wird mit PHP geliefert und es besteht normalerweise keine Notwendigkeit, sie zu deaktivieren. Wenn Sie PHP verwenden, ist es am besten, Opcache zu aktivieren.

Was es bewirkt, ist das Hinzufügen einer Speicher-Shared-Cache-Ebene zu Opcodes. Seine Aufgabe besteht darin, neu generierte Opcodes aus dem AST zu extrahieren und zwischenzuspeichern, sodass die Schritte Lexing/Tokenisierung und Parsing w?hrend der Ausführung übersprungen werden k?nnen.

Dies ist ein Prozessdiagramm, das die Opcache-Erweiterung enth?lt:

Erkl?rungsprozess für PHP mit Opcache. Wenn die Datei bereits analysiert wurde, ruft PHP zwischengespeicherte Opcodes dafür ab, anstatt sie erneut zu analysieren.

Ein detaillierter Blick auf JIT in PHP 8Die Schritte Lexing/Tokenisieren, Parsen und Kompilieren perfekt überspringen?

Randbemerkung:

Dies sind die fantastischen PHP 7.4-Vorladefunktionen. RFC erm?glicht es Ihnen, PHP FPM anzuweisen, die Codebasis zu analysieren, in Opcodes umzuwandeln und vor der Ausführung zwischenzuspeichern.

M?chten Sie wissen, wie JIT an diesem Interpretationsprozess teilnimmt? Dieser Artikel wird es erkl?ren. Was bewirkt die Just-In-Time-Kompilierung?

Nachdem ich mir Zeevs PHP- und JIT-Sendung auf PHP Internals News angeh?rt habe, habe ich herausgefunden, was JIT eigentlich macht.

Wenn die Opcache-Erweiterung Opcodes schneller abrufen und direkt an die Zend-VM übertragen kann, erm?glicht das JIT die Ausführung ohne Verwendung der Zend-VM.

Zend VM ist ein in C geschriebenes Programm, das als Schicht zwischen Opcodes und der CPU fungiert. JIT generiert kompilierten Code direkt zur Laufzeit, sodass PHP die Zend-VM überspringen und direkt von der CPU ausgeführt werden kann. Theoretisch wird die Leistung besser sein.

Das klingt seltsam, da für jeden Strukturtyp eine konkrete Implementierung geschrieben werden muss, bevor er in Maschinencode kompiliert werden kann. Aber tats?chlich ist das vernünftig.

PHPs JIT verwendet eine Bibliothek namens DynaASM (Dynamic Assembler), die einen Satz von CPU-Anweisungen in einem bestimmten Format in Assembler-Code für viele verschiedene CPU-Typen abbildet. Daher muss der Compiler nur DynASM verwenden, um Opcodes in Maschinencode für eine bestimmte Struktur umzuwandeln.

Allerdings gibt es ein Problem, das mich schon seit langem besch?ftigt.

Wenn das Vorladen PHP-Code vor der Ausführung in Opcodes analysieren kann und DynASM Opcodes in Maschinencode kompilieren kann (Just-In-Time-Kompilierung), warum verwenden wir dann nicht die Ahead-of-Time-Kompilierung, um PHP sofort zu kompilieren?

Einer der Gründe, warum ich durch das Anh?ren von Zeevs Sendung herausgefunden habe, ist, dass PHP eine schwach typisierte Sprache ist, was bedeutet, dass PHP den Typ einer Variablen normalerweise nicht kennt, bis die Zend-VM versucht, einen Opcode auszuführen.

Sie k?nnen den Union-Typ Zend_value überprüfen, um zu erfahren, dass viele Zeiger auf Variablen unterschiedlichen Typs verweisen. Immer wenn Zend VM versucht, einen Wert von einem Zend_value abzurufen, verwendet es Makros wie ZSTR_VAL, um einen Zeiger auf einen String im Union-Typ abzurufen.

Zum Beispiel verarbeitet dieser Zend VM-Handler ?kleiner als oder gleich“ (

Die Verwendung von Maschinencode zur Ausführung der Typinferenzlogik ist nicht m?glich und kann langsamer werden.

Erst auswerten und dann kompilieren ist ebenfalls keine gute Option, da das Kompilieren in Maschinencode eine CPU-intensive Aufgabe ist. Es ist also auch nicht gut, alles zur Laufzeit zu kompilieren.

Wie funktioniert die Just-In-Time-Kompilierung?

Jetzt wissen wir, dass Typen nicht gut abgeleitet werden k?nnen, um sie im Voraus zu kompilieren. Wir wissen auch, dass die Kompilierung zur Laufzeit rechenintensiv ist. Was sind also die Vorteile von JIT für PHP?

Um ein Gleichgewicht zu erreichen, versucht PHPs JIT, nur wertvolle Opcodes zu kompilieren. Dazu analysiert das JIT die Opcodes, die die Zend-VM ausführen wird, und prüft auf m?gliche Kompilierungen. (Laut Konfigurationsdatei)

Wenn ein Opcode kompiliert wird, übergibt er die Ausführung an den kompilierten Code und nicht an Zend VM. Es sieht so aus:

Ein detaillierter Blick auf JIT in PHP 8

JIT-Interpretationsprozess für PHP. Wenn sie kompiliert werden, werden Opcodes nicht von der Zend-VM ausgeführt.

Daher gibt es in der Opcache-Erweiterung zwei Erkennungsanweisungen, um zu bestimmen, ob Opcode kompiliert werden soll. Wenn ja, verwendet der Compiler DynASM, um diesen Opcode in Maschinencode umzuwandeln und diesen Maschinencode auszuführen.

Interessanterweise muss die Codeausführung nahtlos zwischen JIT und interpretiertem Code wechseln k?nnen, da der in der aktuellen Schnittstelle kompilierte Code ein MB-Limit hat (ebenfalls konfigurierbar).

übrigens hat mir dieser Vortrag von Benoit Jacquemont über JIT in PHP geholfen, die ganze Sache zu verstehen.

Ich bin mir immer noch nicht sicher, wann der Kompilierungsteil tats?chlich fertig war, aber ich denke, im Moment m?chte ich es nicht wirklich wissen.

Ihre Leistungssteigerung wird also wahrscheinlich nicht riesig sein

Ich hoffe, jetzt ist jedem klar, warum die meisten PHP-Anwendungen durch die Verwendung von Just-in-Time-Compilern keine enormen Leistungssteigerungen erzielen. Aus diesem Grund empfiehlt Zeev, dass die Erstellung von Profilen und das Experimentieren mit verschiedenen JIT-Konfigurationen für Ihre Anwendung der beste Ansatz ist.

Wenn Sie PHP FPM verwenden, ist es üblich, kompilierte Opcodes über mehrere Anfragen hinweg zu teilen, aber das ?ndert nichts.

Das liegt daran, dass JIT rechenintensive Vorg?nge optimiert und die meisten PHP-Anwendungen heutzutage mehr E/A-gebunden sind als alles andere. Wenn Sie ohnehin auf Festplatte oder Netzwerk zugreifen, ist die Verarbeitung des Vorgangs kompiliert. Das spielt keine Rolle. Der Zeitpunkt wird sehr ?hnlich sein.

Es sei denn...

Sie machen etwas, das nicht an E/A gebunden ist, wie Bildverarbeitung oder maschinelles Lernen. Alles, was E/A nicht berührt, profitiert von einem JIT-Compiler.

Aus diesem Grund sagen die Leute jetzt, dass wir lieber native Funktionen in PHP schreiben als in C. Wenn diese Funktion trotzdem kompiliert werden würde, w?re der Overhead nicht ausdrucksstark.

Es macht Spa?, PHP-Programmierer zu werden ...


Ich hoffe, dieser Artikel wird Ihnen hilfreich sein und es Ihnen erm?glichen, die JIT von PHP8 besser zu verstehen.


Ursprüngliche Adresse: https://thephp.website/en/issue/php-8-jit/

Empfohlen: ?PHP Video Tutorial

Das obige ist der detaillierte Inhalt vonEin detaillierter Blick auf JIT in PHP 8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Wie bleibe ich mit den neuesten PHP-Entwicklungen und Best Practices auf dem neuesten Stand? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

Was ist PHP und warum wird es für die Webentwicklung verwendet? Was ist PHP und warum wird es für die Webentwicklung verwendet? Jun 23, 2025 am 12:55 AM

PHPBECAMEPOPULARFORWebDevelopmentDuetoitSeaseoflearning, Seamlessintegrationwithhtml, weit verbreitete Hostingsupport, andalargeecosystemincludingFrameWorkelaravelandcmsplatformen -?hnliche WordPress.itexcelsinformlingsformen, Managingusesersions, Interacti

Wie setzen Sie die PHP -Zeitzone? Wie setzen Sie die PHP -Zeitzone? Jun 25, 2025 am 01:00 AM

Tosettherighttimezoneinphp, usedate_default_timezone_set () functionAtthestartofyourScriptWithAvalididentifiersuchas'america/new_york'.1.usedate_default_timezone_set () beeanydate/timeFununtions.2.Alternativ, konfigurieren

Wie validiere ich die Benutzereingabe in PHP, um sicherzustellen, dass bestimmte Kriterien erfüllt? Wie validiere ich die Benutzereingabe in PHP, um sicherzustellen, dass bestimmte Kriterien erfüllt? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

Was ist die Datenserialisierung in PHP (Serialize (), nieserialize ())? Was ist die Datenserialisierung in PHP (Serialize (), nieserialize ())? Jun 22, 2025 am 01:03 AM

ThePHPfunctionsserialize()andunserialize()areusedtoconvertcomplexdatastructuresintostorablestringsandbackagain.1.serialize()convertsdatalikearraysorobjectsintoastringcontainingtypeandstructureinformation.2.unserialize()reconstructstheoriginaldatafrom

Wie bin ich PHP -Code in eine HTML -Datei ein? Wie bin ich PHP -Code in eine HTML -Datei ein? Jun 22, 2025 am 01:00 AM

Sie k?nnen PHP -Code in HTML -Dateien einbetten, stellen Sie jedoch sicher, dass die Datei eine Erweiterung von .PHP enth?lt, damit der Server sie richtig analysieren kann. Verwenden Sie Standard -Tags, um PHP -Code einzuwickeln und dynamische Inhalte überall in HTML einfügen. Darüber hinaus k?nnen Sie PHP und HTML mehrmals in derselben Datei wechseln, um dynamische Funktionen wie das bedingte Rendering zu realisieren. Achten Sie darauf, dass Sie die Serverkonfiguration und die Syntax -Korrektheit beachten, um Probleme zu vermeiden, die durch kurze Bezeichnungen, Anführungszeichenfehler oder weggelassene Endbezeichnungen verursacht werden.

Was sind die besten Praktiken zum Schreiben von sauberem und wartbarem PHP -Code? Was sind die besten Praktiken zum Schreiben von sauberem und wartbarem PHP -Code? Jun 24, 2025 am 12:53 AM

Der Schlüssel zum Schreiben von sauberem und leicht zu machenden PHP-Code liegt in klarer Benennung, nach Standards, angemessene Struktur, nützlicher Kommentare und Testbarkeit. 1. Verwenden Sie klare Variablen, Funktionen und Klassennamen wie $ userData und calculatetotalprice (); 2. Folgen Sie dem PSR-12-Standard-Unified-Code-Stil; 3. Teilen Sie die Codestruktur gem?? den Verantwortlichkeiten und organisieren Sie sie mit MVC- oder Laravel-Katalogen im Stil. 4. Vermeiden Sie den Code im Nudelstil und teilen Sie die Logik in kleine Funktionen mit einer einzigen Verantwortung auf. 5. Kommentare an Schlüsselpunkten hinzufügen und Schnittstellendokumente schreiben, um Parameter, Rückgabewerte und Ausnahmen zu kl?ren. 6. Verbesserung der Prüfbarkeit, Abh?ngigkeitsinjektion, reduzieren Sie den globalen Zustand und die statischen Methoden. Diese Praktiken verbessern die Codequalit?t, die Effizienz der Zusammenarbeit und die Nachverdauerung nach der Wartung.

Wie führe ich SQL -Abfragen mit PHP aus? Wie führe ich SQL -Abfragen mit PHP aus? Jun 24, 2025 am 12:54 AM

Ja, YoucanrunsqlQuerieseusePhp und TheProcessinvolveschoosingAdaTabaseextension, ConnectingTothedatabase, ExecutingQueriessafely und ClosenconnectionSwhendone.Todothis, FirstChooseBetweenmysqliorpdo, withpdobeeringmortextextextextextextextextextediestimestutedieseduetosuTosuTosuTosuToseSupporingMulningMulningMulningMulningMuldaTaTablesingmorebotte, withpdobeeringmortextextextextextextediestubliothekern

See all articles