Selon le plan de sortie, Python 3.11.0 sortira le 24 octobre 2022.
Selon les tests, la version 3.11 aura une amélioration des performances de 10 à 60 % par rapport à la version 3.10. Cette réussite est principalement attribuée au projet « Faster CPython », également connu sous le nom de « Projet Shannon ».
La version 3.11 est un début passionnant pour l’accélération de Python. D'autres actions arriveront prochainement dans la version 3.12.
L'article suivant est traduit de "Python 3.12 Goals" par "Shannon Project", jetons-y un coup d'œil d'abord !
Le contenu de cet article peut être sujet à changement, la version actuelle prévaudra !
Cet article est un résumé du contenu principal que Faster CPython prévoit d'implémenter dans la version 3.12.
Le principal moyen d'améliorer la vitesse dans Python 3.11 est de remplacer les opcodes individuels par des opcodes contextuels plus rapides (opcodes de spécialisation adaptative). La prochaine grande amélioration consiste à optimiser plusieurs opérations de l'opcode.
Pour ce faire, de nombreux opcodes de haut niveau existants seront remplacés par des opcodes de bas niveau, tels que ceux utilisés pour vérifier les numéros de version et les décomptes de références. Ces opcodes plus simples sont plus faciles à optimiser, par exemple, les opérations de comptage de références redondantes peuvent être supprimées.
Ces opcodes de niveau inférieur nous donnent également un ensemble d'instructions adaptées à la génération de code machine (dans les projets CPython et JIT tiers).
Pour ce faire, une boucle d'interprétation sera générée en fonction de la description déclarative.
Cela peut réduire certains bugs causés par le maintien de la boucle d'interprétation synchronisée avec certaines fonctions associées (mark_stacks, stack_effect, etc.), et nous permet également d'expérimenter des changements plus importants dans la boucle d'interprétation.
Python dispose actuellement d'un verrou d'interpréteur global (GIL) par processus, ce qui entrave le parallélisme multithread.
PEP-684 proposé Un La solution consiste à garantir que tous les états globaux sont thread-safe et déplacés vers le verrou global de l'interpréteur de chaque sous-interprète.
PEP-554 propose une solution pour Python pour créer des sous-interprètes (actuellement uniquement une fonctionnalité de l'API C), réalisant ainsi un véritable parallélisme multithread.
Nous avons analysé quels bytecodes bénéficieront le plus de la spécialisation et prévoyons d'achever les améliorations restantes à haut rendement dans la version 3.12.
https://www.php.cn/link/7392ea4ca76ad2fb4c9c3b6a5c6e31e3
Il existe de nombreuses possibilités de réduire la taille des structures d'objets Python. Comme ils sont fréquemment utilisés, cela profite non seulement à l’utilisation globale de la mémoire, mais également à la cohérence du cache. Nous prévoyons de mettre en œuvre certaines des idées les plus prometteuses dans la version 3.12.
Il existe certains compromis entre compatibilité ascendante et performances, et un PEP devra peut-être être proposé pour parvenir à un consensus.
Nous allons non seulement réduire la taille des objets, mais également rendre leur disposition plus régulière.
Cela optimise non seulement l'allocation et la désallocation de mémoire, mais accélère également la traversée des objets lors du GC et de la réallocation.
En plus des projets susmentionnés, l'équipe de développement améliorera également la qualité globale de la base de code CPython :
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!