Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Matlamat Python 3.12: prestasi yang lebih cekap!

Matlamat Python 3.12: prestasi yang lebih cekap!

王林
王林ke hadapan
2023-04-22 14:43:091673semak imbas

Python 3.12 目标:还可以更快!

Mengikut pelan keluaran, Python 3.11.0 akan dikeluarkan pada 24 Oktober 2022.

Menurut ujian, 3.11 akan mempunyai peningkatan prestasi 10-60% berbanding 3.10 Pencapaian ini terutamanya dikaitkan dengan projek "Faster CPython", yang juga dikenali sebagai "Shannon Project".

Versi 3.11 ialah permulaan yang menarik untuk mempercepatkan Python. Lebih banyak aksi akan datang pada 3.12 seterusnya.

Artikel berikut diterjemahkan daripada "Python 3.12 Goals" oleh "Shannon Project", mari kita lihat dahulu!

  • Pengarang: Mark Shannon
  • Penterjemah: Pea Flower Cat @Python Cat
  • Bahasa Inggeris: https://github.com/faster-cpython/ideas /wiki /Python-3.12-Goals

Kandungan artikel ini boleh diubah, versi sebenar akan diutamakan!

Artikel ini ialah ringkasan kandungan utama yang Faster CPython merancang untuk melaksanakan dalam 3.12.

Pengoptimum Jejak

Cara utama untuk meningkatkan kelajuan dalam Python 3.11 ialah menggantikan opcode individu dengan opcode sensitif konteks yang lebih pantas (opcodes pengkhususan adaptif), seterusnya Penambahbaikan besar adalah untuk mengoptimumkan larian daripada berbilang opcode.

Untuk melakukan ini, banyak opcode peringkat tinggi sedia ada akan digantikan dengan opcode peringkat rendah, seperti yang digunakan untuk menyemak nombor versi dan kiraan rujukan. Opcode yang lebih ringkas ini lebih mudah untuk dioptimumkan, contohnya, operasi pengiraan rujukan berlebihan boleh dialih keluar.

Opcode peringkat rendah ini juga memberi kami satu set arahan yang sesuai untuk menjana kod mesin (dalam kedua-dua projek CPython dan JIT pihak ketiga).

Untuk melakukan ini, gelung penterjemah akan dijana berdasarkan perihalan perisytiharan.

Ini boleh mengurangkan beberapa pepijat yang disebabkan oleh mengekalkan gelung penterjemah disegerakkan dengan fungsi berkaitan tertentu (mark_stacks, stack_effect, dsb.), dan juga membolehkan kami mencuba perubahan yang lebih besar pada gelung penterjemah.

Selarian berbilang benang

Python pada masa ini mempunyai kunci penterjemah global (GIL) bagi setiap proses, yang menghalang keselarian berbilang benang.

  • PEP-684: https://peps.python.org/pep-0684
  • PEP-554: https://peps.python.org/pep-0554

Python 3.12 目标:还可以更快!

PEP-684 mencadangkan penyelesaian untuk memastikan semua keadaan global selamat untuk benang dan dipindahkan ke kunci penterjemah global bagi setiap penggunaan sub-jurubahasa.

Python 3.12 目标:还可以更快!


PEP-554 mencadangkan penyelesaian untuk Python untuk mencipta sub-jurubahasa (pada masa ini hanya ciri C API), dengan itu mencapai benar Keselarian berbilang benang.

  • Python Cat Nota: PEP-554 telah dicadangkan seawal 2017, dengan matlamat untuk mendarat pada versi Python 3.8-3.9, tetapi keadaan menjadi tidak produktif. Seawal 2019, saya juga menterjemah artikel "Adakah Python GIL telah dibunuh?". Pisau daging telah dihayun, biarkan ia terbang seketika~~

Lebih pengkhususan

Kami menganalisis kod bait mana yang paling mendapat manfaat daripada pengkhususan, dan merancang untuk 3.12 Melengkapkan baki penambahbaikan hasil tinggi.

​https://www.php.cn/link/7392ea4ca76ad2fb4c9c3b6a5c6e31e3​

Python 3.12 目标:还可以更快!

struktur objek yang lebih kecil

Terdapat banyak peluang untuk mengurangkan saiz struktur objek Python. Memandangkan ia kerap digunakan, ini bukan sahaja memberi manfaat kepada keseluruhan penggunaan memori, tetapi juga ketekalan cache. Kami merancang untuk melaksanakan beberapa idea yang paling menjanjikan dalam 3.12.

Terdapat beberapa pertukaran di sini antara keserasian dan prestasi ke belakang, dan PEP mungkin perlu dicadangkan untuk membina konsensus.

Python 3.12 目标:还可以更快!Kurangkan overhed pengurusan memori

Kami bukan sahaja akan mengurangkan saiz objek, tetapi juga menjadikan reka letaknya lebih teratur.

Ini bukan sahaja mengoptimumkan peruntukan memori dan deallocation, tetapi juga mempercepatkan traversal objek semasa GC dan pengagihan semula.

Kestabilan API

Selain projek yang disebutkan di atas, pasukan pembangunan juga akan meningkatkan kualiti keseluruhan pangkalan kod CPython:

  • Jadikan pengkompil lebih mudah diselenggara dan diuji dengan mengurangkan gandingan peringkat kompilasi yang berbeza.
  • Secara aktif memantau dan meningkatkan liputan kod suite ujian CPython pada tahap bahasa C.
  • Suite penanda aras prestasi Python yang dipertingkatkan untuk menyertakan lebih banyak ujian beban dunia sebenar yang mewakili.
  • Membantu dengan isu CPython dan PR, terutamanya yang berkaitan dengan prestasi.
  • Menambah mesin untuk penanda aras standard dan menambah keputusan ujian untuk macOS dan Windows.
  • Teruskan bekerja dengan projek utama yang banyak menggunakan kernel Python untuk membantu mereka menyesuaikan diri dengan perubahan dalam penterjemah CPython.

Atas ialah kandungan terperinci Matlamat Python 3.12: prestasi yang lebih cekap!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam