Главная
АИ #25 (311)
Статьи журнала АИ #25 (311)
Экспериментальная оценка производительности интерпретаторов Python: CPython, PyP...

Экспериментальная оценка производительности интерпретаторов Python: CPython, PyPy и GraalPy

Цитирование

Мухаметова Л. Р. Экспериментальная оценка производительности интерпретаторов Python: CPython, PyPy и GraalPy // Актуальные исследования. 2026. №25 (311). URL: https://apni.ru/article/15601-eksperimentalnaya-ocenka-proizvoditelnosti-interpretatorov-python-cpython-pypy-i-graalpy

Аннотация статьи

В работе сравнивается производительность интерпретаторов Python (CPython, PyPy, GraalPy) на численных и текстовых задачах. JIT‑компиляция в PyPy и GraalPy ускоряет циклические численные операции до 40 раз, но с NumPy различия исчезают. На текстовых задачах преимущество альтернативных интерпретаторов слабее. Даны рекомендации по выбору интерпретатора с учётом нагрузки и ресурсов.

Текст статьи

Введение

В первой части работы [1] предложена методология сравнения интерпретаторов Python – CPython, PyPy и GraalPy – учитывающая их архитектурные различия. Разработан набор бенчмарков для численных и текстовых задач и формализован протокол сбора метрик.

Настоящая работа представляет результаты применения методологии. Цель – оценить производительность интерпретаторов и сформулировать рекомендации по их выбору. Для этого измерены время выполнения и пиковое потребление памяти, проанализированы данные, выявлены сценарии наилучшей производительности и сформулированы критерии выбора.

Эффективность интерпретаторов в задачах интенсивных численных вычислений

Эксперимент показал, что PyPy и GraalPy значительно превосходят CPython в циклических численных операциях благодаря JIT-компиляции, которая «происходит на стороне интерпретатора, что позволяет улучшить производительность приложений, особенно в случае использования больших объемов данных» [2, с. 12]. Динамическая компиляция горячих участков в машинный код сокращает накладные расходы на интерпретацию, особенно на длительных итерациях. Однако при неоднородных данных и частых ветвлениях выигрыш от JIT снижается, так как адаптивная оптимизация не успевает скомпилировать все участки, сближая результаты с CPython.

С использованием NumPy различия между интерпретаторами нивелируются, поскольку вычисления делегируются низкоуровневым реализациям на C и Fortran, выполняющимся вне интерпретатора, что делает JIT-компиляцию нерелевантной.

Анализ скорости обработки текстовых данных и регулярных выражений

Эксперимент показал, что PyPy значительно ускоряет операции с регулярными выражениями – до трёх раз быстрее, чем CPython, благодаря оптимизации шаблонов с использованием JIT-компиляции. CPython демонстрирует стабильные, но более низкие результаты. GraalPy немного превосходит CPython при обработке коротких строк благодаря эффективной компиляции, но на длинных шаблонах его преимущества могут снижаться из-за накладных расходов на JIT. При работе с большими текстовыми файлами GraalPy выигрывает до 50% времени выполнения по сравнению с CPython, особенно при стабильной загрузке процессора. PyPy также показывает ускорение, но уступает GraalPy из-за менее агрессивной оптимизации памяти и кэширования.

Оценка потребления оперативной памяти и накладных расходов JIT-компиляции

Анализ потребления ресурсов на этапе холодного запуска выявляет существенные различия между интерпретаторами. GraalPy требует до 200 МБ оперативной памяти при инициализации JIT-компилятора против 50 МБ у CPython, что обусловлено загрузкой сложной инфраструктуры GraalVM. Это делает GraalPy менее пригодным для короткоживущих скриптов, где время инициализации критически влияет на общую производительность.

PyPy занимает промежуточное положение: при долгосрочном выполнении его сборщик мусора обеспечивает более предсказуемое освобождение ресурсов, чем у GraalPy, что позволяет эффективно управлять памятью в задачах непрерывной обработки данных. Выбор интерпретатора должен основываться на балансе между пиковой скоростью выполнения и доступным объемом оперативной памяти.

Критерии и ограничения при выборе интерпретатора

Эффективность JIT-компиляции в PyPy и GraalPy зависит от характера приложения. Для длительных численных циклов выгода превышает затраты на разогрев, но для короткоживущих скриптов время компиляции может превышать время выполнения, делая JIT-интерпретаторы нецелесообразными. В задачах обработки текста преимущества JIT нивелируются, и CPython остаётся конкурентоспособным благодаря зрелости и экосистеме с оптимизированными C-расширениями.

PyPy и GraalPy ограничены неполной поддержкой C-API, что затрудняет использование популярных библиотек. GraalPy перспективен для многопоточных сред и интеграции с Java, но проблемы совместимости и потребления памяти остаются актуальными. Выбор интерпретатора должен основываться на анализе нагрузки и необходимости сторонних библиотек.

Сводные данные приведены в таблице.

Таблица

Сравнительная характеристика интерпретаторов Python

Критерий

CPython

PyPy

GraalPy

Архитектура

Интерпретатор байт-кода

Трассирующий JIT-компилятор

JIT-компиляция на базе GraalVM

Относительная скорость (численные циклы)

1× (эталон)

До 20× быстрее

До 40× быстрее

Потребление памяти (холодный старт)

~50 МБ

Промежуточное

До 200 МБ

Поддержка C-API / NumPy

Полная

Ограниченная

Ограниченная

Время "разогрева" JIT

Отсутствует

Требуется

Требуется

Многопоточность

Ограничена GIL

Ограничена GIL

Потенциально эффективна

Рекомендуемые сценарии

Универсальный, текстовые задачи, NumPy/Pandas

Длительные численные циклы

Высоконагруженные системы, интеграция с Java

Заключение

Исследование подтвердило зависимость производительности интерпретаторов от типа нагрузки. На численных задачах PyPy и GraalPy значительно быстрее CPython, но при использовании NumPy различия исчезают. На текстовых задачах преимущество альтернативных интерпретаторов менее выражено.

Анализ памяти выявил ограничение GraalPy – до 200 МБ при инициализации, что делает его менее пригодным для короткоживущих скриптов. PyPy занимает промежуточную позицию.

Рекомендации: для численных расчётов – PyPy или GraalPy; для текстовых задач – CPython; для универсальных приложений – PyPy. GraalPy ограничен потреблением памяти и совместимостью с C-API.

Список литературы

  1. Мухаметова Л.Р. Методология сравнительного тестирования интерпретаторов Python: архитектурные аспекты CPython, PyPy и GraalPy // Актуальные исследования. 2026. №25 (311). URL: https://apni.ru/article/15600-metodologiya-sravnitelnogo-testirovaniya-interpretatorov-python-arhitekturnye-aspekty-cpython-pypy-i-graalpy.
  2. Чилингарова С.А. Методы оптимизации для динамических (just-in-time) компиляторов // Компьютерные инструменты в образовании. – 2006. – № 2. – С. 9-24.

Поделиться

6
Обнаружили грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики)? Напишите письмо в редакцию журнала: info@apni.ru

Похожие статьи

Другие статьи из раздела «Информационные технологии»

Все статьи выпуска
Актуальные исследования

#26 (312)

Прием материалов

20 июня - 26 июня

осталось 5 дней

Размещение PDF-версии журнала

1 июля

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

8 июля