Главная
АИ #25 (311)
Статьи журнала АИ #25 (311)
Методология сравнительного тестирования интерпретаторов Python: архитектурные ас...

Методология сравнительного тестирования интерпретаторов Python: архитектурные аспекты CPython, PyPy и GraalPy

Цитирование

Мухаметова Л. Р. Методология сравнительного тестирования интерпретаторов Python: архитектурные аспекты CPython, PyPy и GraalPy // Актуальные исследования. 2026. №25 (311). URL: https://apni.ru/article/15600-metodologiya-sravnitelnogo-testirovaniya-interpretatorov-python-arhitekturnye-aspekty-cpython-pypy-i-graalpy

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

Наличие альтернативных реализаций Python с JIT-компиляцией ставит задачу обоснованного выбора интерпретатора. Предложена методология сравнения производительности CPython, PyPy и GraalPy, учитывающая их архитектурные различия. Разработан набор бенчмарков для численных и текстовых задач и формализован протокол сбора метрик с многократными замерами и статистической обработкой.

Текст статьи

Введение

Интерпретируемая природа Python, реализованная по умолчанию в CPython, часто становится узким местом производительности при выполнении ресурсоемких задач. Появившиеся в последние годы альтернативные реализации – PyPy с трассирующей JIT-компиляцией и GraalPy на базе GraalVM – обещают существенное ускорение за счёт динамической оптимизации выполнения кода. Однако на сегодняшний день отсутствует систематическое и воспроизводимое сравнение их производительности на задачах, не использующих внешние оптимизированные библиотеки (например, NumPy), что затрудняет обоснованный выбор интерпретатора в прикладных проектах.

Цель данной работы – разработка методологии экспериментального сравнения производительности CPython, PyPy и GraalPy, охватывающей как численные вычисления (матричные операции, численное интегрирование), так и задачи обработки текста (регулярные выражения, токенизация). Для достижения цели необходимо решить следующие задачи: обосновать выбор репрезентативных бенчмарков с учётом архитектурных особенностей интерпретаторов, определить условия проведения экспериментов, обеспечивающие воспроизводимость и минимизацию погрешностей, а также формализовать протокол сбора метрик времени выполнения и потребления оперативной памяти. Решение этих задач создаёт основу для последующего эмпирического анализа, результаты которого будут представлены во второй части работы.

Методология экспериментального исследования

Архитектурные различия CPython, PyPy и GraalVM

Архитектура CPython базируется на классическом цикле интерпретации байт-кода: исходный код транслируется во внутреннее представление и последовательно выполняется виртуальной машиной [2, с. 5]. Ключевым ограничением этой модели является глобальная блокировка интерпретатора (GIL), которая гарантирует атомарность операций с памятью, но препятствует эффективному распараллеливанию вычислительных потоков. Существующие API и библиотеки обеспечивают функциональную мощь Python, но создают трудности для его быстрого выполнения, что подтверждается низкой производительностью стандартной реализации. В контексте численных задач, требующих интенсивных параллельных вычислений, GIL становится узким местом, поскольку даже при использовании многопоточности фактическое исполнение остается последовательным.

В отличие от CPython, PyPy применяет JIT-компиляцию на основе технологии трассировки, которая динамически идентифицирует и оптимизирует часто выполняемые участки кода, в частности повторяющиеся циклы [3, с. 12]. Этот подход позволяет транслировать интерпретируемый байт-код в машинный код непосредственно во время выполнения программы, что особенно эффективно при работе с большими объемами данных [1, c. 3]. Трассировочный JIT-компилятор анализирует профиль выполнения и генерирует специализированный машинный код, устраняя накладные расходы интерпретации, что кардинально меняет профиль производительности по сравнению с классическим интерпретатором.

Дизайн бенчмарков: выбор алгоритмов и репрезентативность данных

Для численных задач выбраны эталонные алгоритмы – умножение матриц и вычисление чисел Фибоначчи. Они создают интенсивную вычислительную нагрузку на арифметические операции и циклы, позволяя выявить различия в эффективности интерпретации байт-кода и JIT-компиляции. Умножение матриц требует множества операций с плавающей запятой и доступа к памяти, тогда как рекурсивное вычисление Фибоначчи акцентирует нагрузку на управление стеком вызовов и целочисленную арифметику. Выбранный набор покрывает ключевые аспекты численных расчётов, обеспечивая репрезентативность для данного класса задач.

Для текстовых задач отобраны алгоритмы обработки строк – поиск по регулярным выражениям и поиск подстрок. Эти операции отражают нагрузку на память, сравнение символов и интерпретацию байт-кода. Регулярные выражения требуют сложной логики сопоставления и управления состоянием автомата, а поиск подстрок проверяет эффективность встроенных строковых методов. Данный выбор обеспечивает репрезентативность для типичных задач обработки текста, позволяя сравнить интерпретаторы в условиях, близких к реальным приложениям.

Среда исполнения и протокол сбора метрик производительности

Эксперименты выполнялись в изолированной среде с фиксированной версией операционной системы в однопоточном режиме, что минимизирует влияние фоновых процессов на замеры времени и потребления памяти. Изоляция достигалась посредством контейнеризации. При организации замеров длительность запусков подбиралась согласно рекомендациям – проводились замеры продолжительностью от 60 секунд с последующим усреднением результатов для уменьшения флуктуаций. Такая совокупность мер обеспечивает воспроизводимость условий эксперимента и снижает систематические и случайные погрешности.

Протокол сбора метрик предусматривал многократные прогоны каждого бенчмарка с последующим усреднением. Использовалась методика с 30 повторными замерами, что уменьшает влияние аномалий и позволяет надежно оценить центральные тенденции времени выполнения [1, c. 472]. Для окончательной валидации применялись статистические критерии оценки разброса, после чего формировались итоговые показатели, пригодные для сравнительного анализа производительности CPython, PyPy и GraalPy.

Заключение

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

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

  1. Олимпиев Н.В. Разработка методики тестирования интерпретаторов языка Python для веб-приложений // E-Scio. – 2022. – С. 471-477.
  2. Пилипенко А.В. Обзор интерпретации и компиляции в виртуальных машинах // Компьютерные инструменты в образовании. – 2012. – № 3. – С. 3-15.
  3. Чилингарова С.А. Методы оптимизации для динамических (just-in-time) компиляторов // Компьютерные инструменты в образовании. – 2006. – № 2. – С. 9-24.

Поделиться

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

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

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

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

#26 (312)

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

20 июня - 26 июня

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

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

1 июля

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

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

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

8 июля