Продуктивність Python 3.11 і те, що нас чекає у майбутньому!
Python 3.11 на 10-60% швидше, ніж Python 3.10. У середньому ми виміряли прискорення в 1,22 рази на стандартному тестовому пакеті. Цей проєкт зосереджений на двох основних областях Python: швидкість запуску і швидкість виконання.
Досить довгий час істотних прискорень у CPython не спостерігалося, були певні поліпшення в деяких останніх версіях, але особливо на підсумкову продуктивність, навіть у спеціальних завданнях це не надто сильно впливало, не кажучи про завдання загального призначення, які становлять основну роботу.
Все почало змінюватися нещодавно, коли оголосили роботу над проєктом faster СPython. Перша підготовча робота вже почалася в 3.10, а перші реальні поліпшення мали бути показані в 3.11, що й відбулося нещодавно при виході нової версії альфа python 3.11.
У майбутньому релізі на нас чекає значне прискорення продуктивності python! Звичайно, в певних задачах ми не побачимо істотної відмінності (не беремо до уваги завдання, де основний bottleneck становить i/o навантаження), але сам факт того, що заявляються такі великі значення не може не тішити, і в особливо вузьких місцях (у певних ми отримаємо дуже хороший приріст продуктивності, але вже на цей час точно ясно одне, що загальна підсумкова продуктивність додатків зросте для всіх! А якщо у вас великий парк серверів та сервісів написаних на Python, які там працюють, то покращення навіть на 10 відсотків ви помітите, не кажучи вже про великі значення, які також заявляються.
Чому це вдалося? Що було зроблено?
Faster Runtime
Була проведена робота з оптимізацією кадрів, що створюються при виклику функцій. А в більшій частині коду користувача, об'єкти кадру, при виклику функцій, тепер не створюються зовсім, що призвело до підсумкового приросту продуктивності на 3-7 відсотків.
Inlined Python function calls
Дана оптимізація дозволяє повністю уникнути виклику що оцінює функції для інтерпретації коду функцій python, яка раніше викликалася завжди. Для рекурсивних функцій дана оптимізація дозволила отримати прискорення в 1.7 рази, а загальної продуктивності це поліпшення принесло 1-3%.
І тепер найголовніше!
Specializing Adaptive Interpreter
Це основна та ключова частина faster CPython і причина чому python став настільки швидшим. Ідеї та рішення, які закладені в даній частині, відкривають нові можливості у зростанні продуктивності python. Загальна ідея полягає в тому, що попри те, що python є динамічною мовою, у більшості програм є області, в яких об'єкти та типи змінюються вкрай рідко, ця концепція відома як стабільність типів, і тепер під час виконання python шукає такі місця та замінює операції більш спеціалізовані. Це також призводить до ще однієї концепції, званої вбудованим кешуванням, тепер Python кешує результати ресурсомістких операцій безпосередньо в байт-коді. Пропоную самим ознайомитися з повним текстом, оскільки дана концепція є вкрай важливою і є новою віхою у розвитку python.
Також додали ще додаткових оптимізацій, які є не такими важливими, але також прискорюють продуктивність у певних місцях.
Попри те, що ще нещодавно основні розробники не мали наміру прискорювати CPython, тому що вважали, що поточної продуктивності достатньо для більшості завдань і важливіше розвивати функціонал мови, а в разі чого ми маємо Сython/PyPy/Numba/mypyc, розширення написані на С і т.д.. То зараз все змінилося.
Найголовніше – це фінансування Microsoft, яке дозволило працювати на постійній основі над проєктом. Наймання на постійну роботу над CPython розробника Марка Шеннона, раніше штатних розробників у CPython не було і мова розвивалася лише завдяки спільноті та позаурочній роботі її членів. Використання напрацювань з HotPy, HotPy2. Великий запит серед спільноти на прискорення продуктивності python. Конкуренція з іншими мовами, на які доводилося мігрувати у зв'язку з великим навантаженням у певних сервісах та гарячих місцях. Тренд на прискорення продуктивності та оптимізації у мовах. На цей момент велика кількість мов постійно заявляють про поліпшення продуктивності та готовність працювати в даному напрямку. І, звичайно, бажання основних розробників цим займатися.
Які зміни на нас чекають у майбутньому? І яка кінцева ціль?
Загальна мета – це прискорення CPython у 5 разів у найближчі 4 роки! Планується це зробити в 4 окремі етапи, кожен з яких збільшує швидкість CPython на 50 відсотків. Планується покращувати інтерпретатор, покращувати роботу з пам'яттю та найголовніше додати JIT компілятор, і далі поступово його покращувати для створення чудового машинного коду. Звичайно ж, буде збереження зворотної сумісності, що є важливою ідеологією python зараз, після складного переходу з python 2 на python 3.