Maison développement back-end tutoriel php Interprétation complète de l'optimisation et des améliorations de la version php8.0

Interprétation complète de l'optimisation et des améliorations de la version php8.0

Jun 29, 2020 am 09:51 AM
jit php8

Interprétation complète de l'optimisation et des améliorations de la version php8.0

À moins d'avoir vécu sous un rocher, ou de vivre dans le passé, vous vous rendrez compte que JIT arrivePHP 8 : le vote s'est tranquillement clôturé aujourd'hui, avec une nette majorité en faveur Fusionné avec PHP8, c'est donc officiel. Cet article explique en détail l'optimisation et l'amélioration de la version php8.0.

Annonce officielle de PHP8 "PHP 8 est là ! L'équipe PHP a publié la première version bêta Alpha1

Maintenant, asseyez-vous et lisez l'article suivant qui brise les mythes dans lequel nous clarifierons quelques éléments sur ce qu'est JIT et quels en seront les avantages. apportez de la confusion et approfondissez son fonctionnement (mais seulement un peu parce que je ne veux pas vous ennuyer).

Comme je ne sais pas à qui je parle, je vais commencer par des questions simples et passer ensuite aux questions complexes, que vous pouvez ignorer si vous êtes déjà sûr de savoir la réponse à la question dans le titre Cette partie. . .

Qu'est-ce que le JIT ?

PHP implémente une machine virtuelle, un processeur virtuel, que nous appelons Zend VM. PHP compile des scripts lisibles par l'homme en instructions (nous les appelons des opcodes) que la machine virtuelle peut comprendre. Cette étape d'exécution est ce que nous appelons le « temps de compilation ». Lors de la phase d'exécution "runtime", la machine virtuelle (Zend VM) exécute les instructions du code (opcodes).

Tout cela fonctionne très bien, des outils comme APC (dans le passé) et OPCache (maintenant) peuvent mettre en cache les instructions du code (opcodes) afin que le "temps de compilation" ne se produise que lorsque cela est nécessaire.

Tout d'abord, il y a une ligne de code qui explique ce qu'est JIT :

Just-in-time est une stratégie de compilateur qui accepte une représentation intermédiaire du code et la convertit en dépendances au moment de l'exécution. Spécifique à l'architecture code machine pour une exécution rapide.

En PHP, cela signifie que le JIT utilisera les instructions générées par Zend VM comme représentation intermédiaire et émettra du code machine dépendant de l'architecture, donc l'hôte du code n'est plus ZendVM, mais le CPU.

Pourquoi PHP a-t-il besoin de JIT ?

Avant PHP 7.0, la communauté interne PHP se concentrait sur la performance, provoquée par une saine concurrence provoquée par le projet HHVM de Facebook. La plupart des changements fondamentaux de PHP 7.0 ont été inclus dans le correctif PHPNG, qui a considérablement amélioré la façon dont PHP utilisait la mémoire et le processeur sur son cœur, et depuis lors, chacun d'entre nous a été obligé de se concentrer sur les performances.

Depuis PHP 7.0, il y a eu quelques améliorations de performances, des optimisations de HashTable (les structures de données de base de PHP), des spécialisations Zend VM pour certains opcodes, des spécialisations du compilateur pour certaines séquences et des améliorations continues du composant optimiseur d'OPCache. . . Il y a tellement d'autres choses à part ça, c'est tellement ennuyeux.

C'est une dure vérité que ces optimisations ne peuvent nous mener que jusqu'à présent et que nous approchons rapidement, ou que nous avons peut-être heurté un mur de briques dans notre capacité à l'améliorer davantage.

REMARQUE : Quand nous disons « nous ne pouvons plus l'améliorer », ce que nous voulons vraiment dire, c'est « nous devons faire des compromis pour ne plus l'améliorer ». ça a l'air attrayant". . . Chaque fois que nous discutons d’optimisation des performances, nous discutons de compromis. Il y a souvent un compromis entre simplicité et performance. Nous aimons tous penser que le code le plus simple est le code le plus rapide, mais dans le monde moderne de la programmation C, ce n’est pas le cas. Le code le plus rapide est généralement un code préparé pour tirer parti des intrinsèques dépendants de l’architecture ou des intrinsèques dépendants de la plate-forme (compilateur). La simplicité ne garantit pas les meilleures performances. . .

À l'heure actuelle, la fonctionnalité JIT de PHP semble être le meilleur moyen d'obtenir plus de performances de PHP.

JIT rendra-t-il mon site Web plus rapide ?

Possible, pas évident.

n'est peut-être pas la réponse que vous attendiez : en général, les applications écrites en PHP sont I/O绑定 et JIT fonctionnent mieux sur CPU绑定 code.

Que signifie exactement « Liaison E/S et CPU » ?

Nous utilisons les termes I/O绑定 et CPU绑定 lorsque nous souhaitons décrire les caractéristiques générales de performances d'un morceau de code ou d'une application.

La façon la plus simple de le dire est :

  • Un morceau de code lié aux E/S, si nous pouvons améliorer (réduire, optimiser) les E/S qu'il effectue, le fera courir plus vite.

  • Un morceau de code lié au CPU s'exécutera plus rapidement si nous pouvons améliorer (réduire, optimiser) les instructions que le CPU exécute, ou (comme par magie) augmenter la vitesse d'horloge du CPU : )

  • Un morceau de code ou une application peut être lié aux E/S, au CPU, ou à la fois au CPU et aux E/S de manière égale.

  • De manière générale, les applications PHP ont tendance à être liées aux E/S - ce qui les ralentit, ce sont les E/S qu'elles effectuent - connexion, lecture et écriture dans des bases de données, des caches, des fichiers, des sockets, etc. .

À quoi ressemble le PHP lié au CPU ?

En raison de la nature de la plupart des applications PHP, de nombreux programmeurs PHP ne sont pas familiers avec le code lié au processeur - leur travail consiste souvent à se connecter à une base de données, ou peut-être à un cache, à effectuer un travail et des sorties légers. une html/json/xml réponse.

Vous pourriez parcourir la base de code et trouver beaucoup de code qui n'a rien à voir avec les E/S, ou même du code qui appelle des fonctions complètement déconnectées des E/S, et être confus, et je semble impliquer que ce n'est pas le cas. Cela ne limite pas le processeur de votre application, même s'il peut y avoir plus de lignes de code gérant les non-E/S que les E/S.

PHP est en fait assez rapide, c'est l'un des langages interprétés les plus rapides au monde. Il n'y a pas de différence significative entre la Zend VM appelant une fonction qui n'a rien à voir avec les E/S et le fait d'effectuer le même appel en code machine.

Il y a évidemment une différence, mais le fait est que le code machine a une convention d'appel, Zend VM a une convention d'appel, le code machine a un prologue, Zend VM a un prologue : appeler quelque chose dans un opcode Zend c_level_function() ou le code machine n'a pas d'impact significatif sur les performances de l'application appelante - bien qu'il semble avoir un impact important sur cet appel.

Remarque : La convention d'appel fait grossièrement référence à une série d'instructions exécutées avant d'entrer dans une autre fonction, et le prologue fait référence à une série d'instructions exécutées lors de la saisie d'une autre fonction : dans les deux cas , la convention d'appel place les paramètres sur la pile et le prologue les supprime de la pile.

Qu'en est-il des boucles, des appels de queue et des X ? Je vous entends demander : PHP est en fait très intelligent, et avec le composant d'optimisation d'OPCache activé, c'est comme si votre code était transformé comme par magie en la forme la plus efficace que vous puissiez écrire.

Maintenant, il est important de noter que le JIT ne change pas la convention d'appel des fonctions Zend, plutôt que celle établie par la VM - Zend doit pouvoir basculer entre les modes JIT et VM à tout moment, donc la décision de conserver celle établie par la convention VM Calling. Ainsi, lorsque le JIT est en cours d’exécution, ces appels ne sont pas significativement accélérés partout.

Si vous voulez voir à quoi ressemble le code PHP lié au CPU, consultez la documentation Zend/bench.php... Il s'agit évidemment d'un exemple extrême de code CPU, mais il devrait nous donner une idée d'où le JIT brille vraiment C'est dans le domaine des mathématiques.

PHP constitue-t-il le compromis ultime pour des mathématiques plus rapides ?

Non, nous avons fait cela pour élargir la portée de PHP, et pas mal.

De l'avis de ce développeur PHP très partial, si vous êtes un programmeur web en 2019 et que vous n'avez pas envisagé d'utiliser PHP dans votre prochain projet, alors vous faites mal le web.

Améliorer la capacité d'effectuer des calculs plus rapidement en PHP, à première vue, semble être une portée très étroite.

Cependant, cela ouvre en fait la porte à l'apprentissage automatique, au rendu 3D, au rendu 2D (GUI) et à l'analyse de données (pour n'en nommer que quelques-uns).

Pourquoi ne pouvons-nous pas l'utiliser dans PHP 7.4 ?

Je viens d'appeler JIT le "compromis ultime", et je pense que c'est le cas : c'est sans doute l'une des stratégies de compilateur les plus complexes jamais conçues, peut-être la plus complexe. L’introduction de JIT introduit une complexité considérable.

Si vous demandiez à Dmitry (l'auteur de JIT) s'il avait créé du PHP complexe, il répondrait "Non, je déteste la complexité" (c'est une citation directe).

En fin de compte, la complexité est quelque chose que nous ne comprenons pas, et actuellement, il y a très peu de développeurs internes (moins de quelques-uns) qui comprennent vraiment la mise en œuvre du JIT.

PHP 7.4 évolue rapidement et la fusion avec php7.4 nous laissera avec une version de PHP que seules quelques personnes peuvent déboguer, corriger ou améliorer (dans le vrai sens du terme). Pour ceux qui ont voté contre la fusion avec PHP 7.4, cette situation est inacceptable.

D'ici PHP 8, beaucoup d'entre nous travailleront dur pour comprendre le JIT pendant notre temps libre :

Nous avons encore certaines fonctionnalités à implémenter et devons être retravaillées pour php8 Pour écrire des outils, nous devons d’abord comprendre JIT. Nous avons besoin de ce temps et sommes extrêmement reconnaissants qu’une majorité d’électeurs aient jugé bon de nous l’accorder.

La complexité n'est pas synonyme de terrible :

La complexité peut être belle, et comme une nébuleuse, JIT est ce genre de complexité. En principe, vous pouvez comprendre pleinement quelque chose de complexe et ne réduire que légèrement sa complexité apparente. En d’autres termes, même s’il y avait 20 développeurs internes aussi familiers avec JIT que Dmitry, cela ne changerait pas vraiment la complexité du JIT.

Le développement PHP va-t-il ralentir ?

Il n’y a aucune raison de penser que ce soit le cas. Nous avons suffisamment de temps pour affirmer avec certitude qu'au moment où PHP 8 sera généralement disponible, suffisamment d'entre nous seront familiers avec JIT pour être au moins aussi utiles qu'aujourd'hui pour corriger les bugs et faire avancer PHP.

Lorsque vous essayez de relier cela au fait que JIT est intrinsèquement complexe, considérez que la plupart du temps que nous passons à introduire une nouvelle fonctionnalité est en fait consacré à discuter de cette fonctionnalité. Pour la plupart des fonctionnalités, voire des correctifs, l'écriture du code peut prendre des minutes ou des heures, et les discussions peuvent prendre des semaines ou des mois. Dans de rares cas, l'écriture du code d'une fonctionnalité peut prendre des heures ou des jours, mais dans ces rares cas, les discussions prennent toujours plus de temps.

Pour une analyse détaillée de PHP8, veuillez vous référer à "Explication graphique JIT des nouvelles fonctionnalités de PHP8" " Dans quelle mesure les performances de PHP 8 ont-elles été améliorées ?

Cet article est directement traduit du site Web chinois php : https://blog.krakjoe.ninja/2019/03/php-gr8.html

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre php5 et php8 Quelle est la différence entre php5 et php8 Sep 25, 2023 pm 01:34 PM

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Comment ajouter une extension MySQL à PHP8 Comment ajouter une extension MySQL à PHP8 Oct 07, 2023 pm 03:31 PM

Les étapes pour ajouter l'extension MySQL à PHP8 sont : 1. Installez la bibliothèque client MySQL ; 2. Installez les outils de développement pour PHP 8 ; 3. Téléchargez le code source de l'extension MySQL ; 4. Compilez et installez l'extension MySQL ; Extension MySQL ; 6. Redémarrez Juste un serveur Web.

Explication graphique détaillée de la méthode d'installation et de configuration d'Apache2.4+php8.0 Explication graphique détaillée de la méthode d'installation et de configuration d'Apache2.4+php8.0 Dec 06, 2022 pm 04:53 PM

Cet article vous présentera comment installer Apache2.4 et comment configurer php8.0. L'article est accompagné d'images et d'étapes détaillées. Voyons comment installer et configurer Apache2.4+php8.0~.

Comment se connecter à la base de données en php8 Comment se connecter à la base de données en php8 Nov 16, 2023 pm 02:41 PM

PHP8 peut utiliser mysqli et PDO pour se connecter à la base de données. Introduction détaillée : 1. Utilisez mysqli pour vous connecter à la base de données en transmettant le nom du serveur de base de données, le nom d'utilisateur, le mot de passe et le nom de la base de données pour vous connecter. Ensuite, utilisez l'attribut `connect_error` pour vérifier si la connexion réussit et affichez un message d'erreur si la connexion échoue. Enfin, fermez la connexion en appelant la méthode `close()` ; 2. Utilisez PDO pour vous connecter à la base de données, et connectez-vous en passant le nom du serveur de base de données, le mot de passe et le nom de la base de données, etc.

Comment convertir les types de données php8 Comment convertir les types de données php8 Nov 16, 2023 pm 02:51 PM

Les méthodes du type de données php8 incluent la conversion d'une chaîne en entier, la conversion d'un entier en chaîne, la conversion d'une chaîne en nombre à virgule flottante, la conversion d'un nombre à virgule flottante en chaîne, la conversion d'un tableau en chaîne, la conversion d'une chaîne en tableau, la conversion d'une valeur booléenne en entier, la conversion d'un entier en Détermination et conversion de valeurs booléennes et de types de variables. Introduction détaillée : 1. La conversion d'une chaîne en un entier inclut la fonction intval() et la conversion de type forcée (int) ; 2. La conversion d'un entier en chaîne inclut la fonction strval() et la conversion de type forcée (string) ; une chaîne à un flotteur Points et ainsi de suite.

Un examen approfondi de JIT dans PHP 8 Un examen approfondi de JIT dans PHP 8 Apr 25, 2022 pm 08:46 PM

Cet article vous guidera à travers le JIT dans PHP 8 et expliquera comment JIT participe au processus d'interprétation. J'espère qu'il sera utile à tout le monde !

Quelles améliorations de performances apporte php8 ? Quelles améliorations de performances apporte php8 ? Dec 21, 2023 pm 02:44 PM

Les performances améliorées de php8 incluent : 1. Introduction du compilateur JIT ; 2. Optimisation des appels de fonctions ; 3. Amélioration du mécanisme de récupération de place ; 4. Amélioration du système de types ; 6. Optimisation du traitement des chaînes ; . Améliorer le traitement des tableaux ; 8. Introduire un nouveau mécanisme de gestion de la mémoire ; 9. Optimiser la génération de code. Introduction détaillée : 1. L'introduction du compilateur JIT PHP8 introduit le compilateur JIT, qui est une technologie de compilation dynamique qui peut convertir le code PHP en code machine pour une exécution plus efficace ;

Améliorez la vitesse d'exécution du code : découvrez la technologie JIT de PHP8 Améliorez la vitesse d'exécution du code : découvrez la technologie JIT de PHP8 Jan 26, 2024 am 10:06 AM

Débloquez la technologie JIT de PHP8 : optimisez la vitesse d'exécution de votre code Avec la sortie de PHP8 fin 2020, l'une des nouvelles fonctionnalités les plus intéressantes est l'introduction de la technologie de compilateur JIT (Just-in-Time). La technologie JIT peut améliorer considérablement la vitesse d'exécution du code PHP, en particulier des fragments de code comportant des calculs et des boucles intensifs. Dans cet article, nous explorerons comment utiliser la technologie JIT de PHP8 pour optimiser la vitesse d'exécution du code, tout en fournissant quelques exemples de code spécifiques. 1. Qu'est-ce qu'un compilateur JIT ? J.

See all articles