La dernière analyse des fonctionnalités, du noyau et de l'architecture PHP en 2022

藏色散人
Libérer: 2023-04-11 07:24:02
avant
2950 Les gens l'ont consulté

1. Compilateur JIT juste à temps. Sur la base de l'optimisation opcache, jit optimise à nouveau en combinaison avec les informations d'exécution pour générer directement du code machine. JIT ne remplace pas l'optimisation du cache opcache, mais une amélioration.

2. Expression de correspondance, utilisée pour la conversion de valeurs et l'affectation de variables.

3.Type syndical.

Prend en charge la déclaration et l'acceptation de plusieurs types différents. Il s'agit d'une collection de deux types ou plus.

4. type de retour statique. La prise en charge des types de retour statiques dans PHP 8 sera plus efficace.

5. Cartographie faible WeakMap. Permet aux clés des tableaux d'être placées dans des objets.

6. Changements de classe et utilisation

1. Héritage des paramètres variables (insipide), autorisé

  • 2. Liaison statique tardive (LSB) (utile), encapsulation au niveau du framework et certains modèles de conception d'usine fonctionnent.

  • 3. Vous pouvez maintenant utiliser la méthode suivante pour obtenir le nom de classe de l'objet

  • 4. Désormais, new et instanceof peuvent être utilisés avec n'importe quelle expression, en utilisant new(expression)(... $args. ) et $obj instanceof(expression).

  • 5. L'écriture est désormais autorisée.

  • 6. Ajouter une interface Stringable (fonction générale, utilisée dans l'encapsulation du modèle de vue).

  • 7. Trait peut désormais définir des méthodes privées abstraites.

De nouvelles fonctionnalités de PHP7 ? (Différence par rapport à PHP5)

1. Déclaration de type scalaire et déclaration de type de valeur de retour.

2. Opérateur de fusion nul (??)

3. Amélioration de l'utilisation de la référence de l'espace de noms : les classes, fonctions et constantes importées du même espace de noms peuvent désormais être importées en même temps via une instruction à usage unique

4. instancier une classe anonyme via une nouvelle classe

5 Les performances sont 2 fois supérieures à celles de php5.

6. Prise en charge 64 bits.

Pourquoi les performances de php7 sont-elles améliorées par rapport à php5 ?

1. Les octets de stockage variables sont réduits. Réduisez l'utilisation de la mémoire et augmentez la vitesse de fonctionnement variable

2. Améliorez la structure du tableau. Les éléments du tableau et les tables de mappage de hachage sont alloués dans la même mémoire, ce qui réduit l'utilisation de la mémoire et améliore le taux de réussite du cache du processeur

3. Mécanisme d'appel de fonction amélioré. En optimisant le processus de transfert de paramètres, certaines instructions sont réduites et l'efficacité d'exécution est améliorée

Processus d'exécution PHP7 ?

Analyse lexicale, découpage du code source en plusieurs unités de chaîne (Token) La dernière analyse des fonctionnalités, du noyau et de larchitecture PHP en 2022

L'analyseur de syntaxe convertit le Token en un arbre de syntaxe abstraite AST

L'arbre de syntaxe abstraite est converti en opcodes (jeu d'instructions d'opcode)

La machine virtuelle interprète et exécute les opcodes (l'opcode est un ensemble d'identifiants d'instructions, correspondant à la fonction de traitement du handler)

En mode web, cycle de vie PHP ?

SAPI fait passer PHP à travers les étapes suivantes : 1. Étape d'initialisation du module (module init) :

Cette étape réalise principalement les opérations d'initialisation du framework PHP et du moteur zend. Cette étape est généralement exécutée une fois au démarrage de SAPI. Pour FPM, elle est exécutée au démarrage du maître fpm. PHP charge le code de chaque extension et appelle sa routine d'initialisation de module (MINIT) pour appliquer certaines variables requises par le module, allouer de la mémoire, etc.

2. Phase d'initialisation de la demande (request init) :

Lorsqu'une demande de page survient, c'est une étape qui sera vécue avant que la demande ne soit traitée. Pour fpm, il s'agit d'une étape après que le processus de travail accepte une requête et lit et analyse les données de la requête. Au cours de cette étape, la couche SAPI cède le contrôle à la couche PHP et PHP initialise les variables d'environnement requises pour exécuter le script de cette requête.

3. Étape d'exécution du script PHP :

Le processus d'analyse et d'exécution du code PHP. Le moteur Zend prend le contrôle, compile le code du script PHP en opcodes et les exécute séquentiellement

4 Arrêt de la demande :

Une fois la demande traitée, elle entre dans la phase de fin et PHP démarrera le processus de nettoyage. À ce stade, le contenu de sortie sera vidé, le contenu de la réponse http sera envoyé, etc., puis il appellera la méthode RSHUTDOWN de chaque module dans l'ordre. RSHUTDOWN permet d'effacer la table des symboles générée lors de l'exécution du programme, c'est-à-dire d'appeler la fonction unset sur chaque variable.

5. Arrêt du module :

Cette phase est exécutée à la fermeture de SAPI et correspond à la phase d'initialisation du module. Cette phase nettoie principalement les ressources et ferme chaque module PHP. En même temps, la fonction hook d'arrêt du module de chaque extension sera rappelée. Cela se produit une fois que toutes les demandes ont été exécutées, comme l'arrêt de fpm. (C'est pour les SAPI tels que CGI et CLI, il n'y a pas de « requête suivante », donc le SAPI commence à se fermer immédiatement.)

Quelle est l'architecture php7 ?

La dernière analyse des fonctionnalités, du noyau et de larchitecture PHP en 2022

Moteur Zend : le moteur Zend fournit des services de base pour PHP, notamment l'analyse lexicale, l'analyse syntaxique, la compilation d'arbres de syntaxe abstraite AST, l'exécution d'opcodes, la conception de variables PHP, la gestion de la mémoire et la gestion des processus.

Couche PHP : lie la couche SAPI et gère la communication avec elle. Elle fournit également une couche de contrôle cohérente pour la détection de safe_mode et open_basedir, et intègre des fonctions d'espace utilisateur telles que fopen(), fread() et fwrite() avec les fichiers. Connecté aux E/S du réseau.

SAPI : Y compris cli fpm, etc., qui fait abstraction des interfaces externes. Tant que le protocole SAPI est suivi, un serveur peut être implémenté.

Extension : le moteur zend fournit des fonctionnalités de base et des spécifications d'interface sur cette base, il peut être développé et étendu

Implémentation des données PHP ?

L'implémentation sous-jacente des données PHP est une table de hachage (également appelée hashTable). )

Le mécanisme de collecte des ordures de PHP ?

PHP peut gérer automatiquement la mémoire et effacer les objets inutiles.

PHP utilise un mécanisme GC de comptage de références.

Chaque objet contient un compteur de référence refcount. Chaque référence est connectée à l'objet et le compteur est incrémenté de 1. Lorsque la référence quitte l'espace de vie ou est définie sur NULL, le compteur est décrémenté de 1. Lorsque le compteur de références d'un objet atteint zéro, PHP sait que vous n'avez plus besoin d'utiliser l'objet et libère l'espace mémoire qu'il occupe.

Quel est le modèle d'architecture de PHP-FPM ? Comment l'avez-vous optimisé ?

Il s'agit d'un modèle architectural de maître et de travailleur. Work gère les demandes, et le maître gère et recycle les processus enfants.

Pour optimisation, la configuration du nombre de processus a été modifiée.

Pour décrire brièvement : en raison du mode statique configuré auparavant, le nombre de processus par défaut était de 200. Plus tard, il y a eu une certaine concurrence, je devrais donc le changer en mode de configuration "troisième", configurer le nombre spécifié de processus, et il y a une valeur minimale et une valeur maximale (la valeur maximale est en fait oubliée ici, je pense juste qu'elle ne doit pas être illimitée, après tout, les ressources matérielles sont le plafond), puis augmenter dynamiquement le nombre de processus en fonction de la valeur réelle nombre de demandes.                                                                                                        

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!

Étiquettes associées:
php
source:learnku.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!