Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung des Schlüssels zur Verdoppelung der Leistung von PHP7

Detaillierte Erklärung des Schlüssels zur Verdoppelung der Leistung von PHP7

*文
*文Original
2018-01-05 13:14:441737Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen vorgestellt, die Ihnen helfen sollen, den Schlüssel zur Verdoppelung der Leistung von PHP7 zu verstehen. Ich hoffe, es hilft allen.

PHP 7 ist die erste große Überarbeitung seit zehn Jahren. Sein größtes Feature ist ein großer Durchbruch in der Leistung. Es kann doppelt so schnell sein wie die Vorgängerversion von PHP 5. sagte Rasmus Lerdorf dass es sogar schneller ist als die HHVM-Virtualisierung. Die Leistung von PHP-Programmen unter dem Computer ist schneller.

HHVM ist ein PHP-Optimierungsmechanismus, der von Facebook an die Eigenschaften seiner eigenen Website angepasst wurde und möglicherweise nicht auf andere Websites anwendbar ist. Aber Rasmus Lerdorf sagte, dass eines der Ziele der neuen Version darin besteht, jedem Website-Entwickler, auch wenn er das Entwicklungsframework Drupal und das Open-Source-E-Commerce-System Opencart verwendet, die gleiche Leistung wie bei der Verwendung der HHVM-Technologie zu ermöglichen. Am Vorabend der Veröffentlichung der neuen Version nutzte er auch die Gelegenheit, nach Taiwan zu kommen, um an der Jahreskonferenz PHPConf Taiwan teilzunehmen und den Schlüssel zum Leistungsdurchbruch von PHP 7 zu teilen.

Für eine ausgereifte Sprache, die in den letzten 20 Jahren viele Überarbeitungen und unzählige Optimierungen durchlaufen hat, ist es nicht einfach, einen Durchbruch zu erzielen, der die Leistung verdoppelt. Rasmus Lerdorf gab zu, dass er nicht so einfach zu finden ist Bei den meisten neuen Projekten gibt es durch die Änderung einiger Programme keinen Verbesserungsbedarf. Im Gegenteil, nach vielen detaillierten Optimierungen und Leistungssteigerungen weist PHP 7 eine Ausführungsleistung auf, die der von HHVM in nichts nachsteht.

Rasmus Lerdorf und das PHP-Kernbeitragsteam haben große Anstrengungen unternommen, um die Anzahl der beim Ausführen des Programms verschobenen Speicherbits zu reduzieren und dadurch die Ausführungsleistung zu beschleunigen. Beispielsweise wird die Datenstruktur zval zum Speichern von Variablen in PHP von 24 Bit auf 16 Bit und Hashtable von 72 Bit auf 56 Bit reduziert. Die Funktionen in PHP werden überprüft, um zu prüfen, ob es Raum für Leistungsverbesserungen gibt.

Neben der Reduzierung der Speichernutzung untersuchte Rasmus Lerdorf auch das Funktionsprinzip der Cache-Leitung der CPU, um zu verstehen, wie der Programmcode mit der CPU interagiert, wie der Compiler den Programmcode unter der neuen CPU-Architektur kompiliert usw Weitere Details sind sicherzustellen. Der Programmcode von PHP 7 entspricht der Architektur moderner CPUs. Obwohl die Optimierung jedes Projekts weniger als 0,5 % zur Leistung beiträgt, da es viele Optimierungsprojekte gibt oder eine bestimmte verbesserte Funktion wiederholt von der Anwendung aufgerufen wird, kann der Gesamteffekt der Korrektur einen so großen Fortschritt machen.

Inspiriert von HHVM haben wir beschlossen, PHP mit sowohl Leistung als auch Funktionalität zu entwickeln

Um den Betrieb von PHP zu optimieren, hat Facebook die virtuelle Maschine HHVM mit JIT-Kompilierung erstellt. Obwohl HHVM über eine schnelle Ausführungsleistung verfügt, kann sein für bestimmte Zwecke optimiertes Design nur eine kleine Anzahl von Entwicklern zufriedenstellen. Im Gegenteil: Rasmus Lerdorf möchte nicht nur die Leistung von PHP verbessern, sondern gleichzeitig auch die Bedürfnisse von High-End-Benutzern und Amateurbenutzern erfüllen und PHP 7 zu einer Programmiersprache machen, die sowohl Leistung als auch allgemeine Funktionen bietet.

Es ist jedoch nicht schwierig, eine Programmiersprache zu entwickeln, die die Bedürfnisse einer kleinen Anzahl von Menschen auf dem Markt erfüllt. Das PHP-Projekt zielt jedoch auf viele Ziele ab und muss die Bedürfnisse von Amateurbenutzern und Profis erfüllen Gleichzeitig ist es für Entwickler schwierig, alles abzudecken. Es wird immer einige Gruppen geben, deren Bedürfnisse nicht erfüllt werden können. „Es ist, als würde man eine große Fläche mit einer Wasserpfeife besprühen völlig durchnässt sein“, sagte Rasmus Lerdorf.

Die Rechenleistung von PHP ohne die Verwendung externer Frameworks ist sehr gut. Aufgrund des Einflusses externer Frameworks ist jedoch die Leistung von PHP, das Tausende von Webseitenanfragen in wenigen Sekunden verarbeiten kann, beeinträchtigt erheblich gesunken und es können nur noch Dutzende Anfragen bearbeitet werden. Rasmus Lerdorf sagte, dass sich Benutzer vor dem Aufkommen von HHVM mehr Gedanken darüber machten, ob PHP die Schwierigkeit der Webentwicklung verringern könnte als über die Leistungsanforderungen von PHP, und dass diese Frameworks die Arbeit von Entwicklern erleichtern können. Nachdem Facebook jedoch HHVM eingeführt hatte, zog es viele Benutzer an, die Wert auf die PHP-Leistung legten, was Rasmus Lerdorf klar machte, dass viele Benutzer Leistungsanforderungen haben. Er begann darüber nachzudenken, wie er die JIT-Architektur von HHVM in PHP integrieren könnte.

Aber Rasmus Lerdorf sagte, dass PHP und HHVM sich im Architekturdesign stark unterscheiden. Beispielsweise sei die Multithread-Architektur von HHVM nicht sehr stabil. Darüber hinaus ist die Portabilität von HHVM nicht gut und es ist noch weit davon entfernt, auf der Windows-Plattform ausgeführt zu werden. PHP hat viele Entwickler, die in der Windows-Umgebung entwickeln, und HHVM kann sich nicht um diese Benutzer kümmern.

Rasmus Lerdorf sagte, dass er die Hauptarchitektur von PHP nicht aufgeben könne. Obwohl sie über die Integration beider nachgedacht haben, weist HHVM viele Einschränkungen bei der Verwendung auf. Obwohl HHVM für Facebook und viele Entwickler ein sehr gutes Tool ist, ist der Einsatzbereich von HHVM für PHP-Projekte nicht breit genug und kann nur die Anforderungen bestimmter Projekte wie Facebook oder Wikipedia erfüllen.

In PHP, das keine stark typisierte Sprache ist, ist es noch schwieriger, JIT zu importieren.

Das Hinzufügen der JIT-Kompilierung zu PHP ist jedoch sehr schwierig. Rasmus Lerdorf sagte, dass JIT lernen muss, die Betriebsmuster (Patterns) des Programms zu identifizieren, z. B. zu verstehen, welche Teile wichtige Programmcodes sind, und vorherzusagen, wann das Programm aufgerufen wird oder welche Teile des Programms aufgerufen werden, bevor das Programm aufgerufen wird laufen.

Rasmus Lerdorf sagte, dass JIT bei vielen Autos vorhersagen können muss, welcher Teil des Autos nach rechts abbiegt, welcher Teil des Autos nach links abbiegt oder welche Autos bestimmter Farben geradeaus fahren JIT muss sie alle vorhersagen.“ Richtig, sonst wird die Leistung stark reduziert. „Wenn die Vorhersage jedoch korrekt ist, wird die Programmausführungsleistung erheblich verbessert.“

Es ist nicht einfach, JIT zur Kompilierung allgemeiner Programmiersprachen hinzuzufügen, weil es aufgrund der dynamischen Natur von PHP noch schwieriger ist. Er sagte beispielsweise, dass der Entwickler den Wert des Parameters $a als 1 deklariert habe, dies bedeute jedoch nicht, dass der Wert aller $a im Programm 1 sei, da der Parameterwert in PHP leicht neu definiert werden könne. Wenn der Entwickler in der C-Sprache den Parameter a als Ganzzahl deklariert, ist a immer eine Ganzzahl. Wenn irgendwo im Programm deklariert wird, dass a ein anderer Typ als eine Ganzzahl ist, ist nicht einmal eine Kompilierung möglich. Und weil die C-Sprache eine stark typisierte Programmiersprache ist, „kann JIT vorhersagen, dass die Variable a eine Ganzzahl ist, aber in PHP haben wir diesen Luxus nicht.“ Er erklärte, dass der Ansatz von HHVM darin besteht, dass JIT lernt, dass a eine Ganzzahl ist Typ Danach wird davon ausgegangen, dass a immer eine ganze Zahl ist.

Um die JIT-Kompilierung nutzen zu können, hat HHVM die Entwicklung von PHP in gewissem Maße eingeschränkt. Benutzer von HHVM müssen die Art der Variablen klar deklarieren. Entwickler, die PHP verwenden, können jedoch zunächst eine Kategorie (Klasse) ohne Natur deklarieren und dann die Variablenattribute der Klasse angeben. „Ohne Einschränkungen müssen wir JIT zu PHP hinzufügen.“ Er sagte, PHP müsse die Entwickler von WordPress, Drupal und anderen Frameworks berücksichtigen und könne die Unterstützung dieser Frameworks nicht willkürlich einstellen. Daher unterliegt PHP im Vergleich zu HHVM stärkeren Einschränkungen bei der Erstellung von JIT.

Das bedeutet jedoch nicht, dass wir kein JIT machen können. Darüber hinaus müssen wir auch die Entwicklungsrichtung von PHP kontrollieren, sagte Rasmus Lerdorf.

Derzeit entwickelt Dmitry Stogov, einer der Hauptmitwirkenden an PHP, einen JIT-Prototyp und verwendet einige experimentelle Anwendungen, um den Betrieb zu testen. Rasmus Lerdorf sagte, dass die Leistung von PHP 7 zehnmal schneller gemacht werden kann, wenn dieses JIT zur Ausführung bestimmter sich wiederholender Operationen oder Schleifenprogramme verwendet wird.

Allerdings gab er auch zu, dass dieser experimentelle JIT bei der Verwendung in WordPress keinen Beschleunigungseffekt erzielte: „Der JIT, den wir erstellen wollen, ist nichts, was wir in Lehrbüchern lernen, sondern etwas, das verwendet werden kann.“ in JIT arbeiten in der realen Welt“, sagte er. Weil PHP schon immer solche Ideale vertrat und versuchte, Probleme im Leben der Menschen zu lösen und in realen Online-Umgebungen zu funktionieren, und nicht nur in Theorien aus Lehrbüchern.

Rasmus Lerdorf sagte, als PHP zum ersten Mal herauskam, habe er mindestens 16 Stunden am Tag damit verbracht, PHP zu entwickeln. Doch nun hat er seine Investitionen in die Entwicklung schrittweise reduziert und widmet seine Energie stattdessen der Öffentlichkeitsarbeit und Reden auf der ganzen Welt. Er sagte scherzhaft: „Anstatt es selbst zu entwickeln, ist es besser, Leute zu inspirieren, die viel schlauer sind als ich und bereit sind, achtzehn Stunden am Tag damit zu verbringen, Programme für die Entwicklung von PHP zu schreiben.“ Er sagte, dass sein ultimatives Ziel darin besteht, dass es kein PHP gibt eine einzelne Zeile in PHP, die von ihm geschrieben wurde: „Jedes wachsende Projekt sollte nicht von einem Entwickler geleitet werden. Alter Programmcode sollte durch neuen Programmcode ersetzt werden.“

Verwandte Empfehlungen:

Detaillierte Erläuterung, wie PHP funktionsfähige Verifizierungscodes implementiert

Detaillierte Erklärung, wie PHP die Dateisuche implementiert

Detaillierte Erklärung, wie PHP entsprechend der Benutzersprache zur entsprechenden Webseite springt

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Schlüssels zur Verdoppelung der Leistung von PHP7. 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