BC/NW 2024 № 1 (41):12.2
ОБЗОР МЕТОДОВ СТАТИЧЕСКОГО АНАЛИЗА КОДА В PYTHON ПРИ ОТКЛЮЧЕННОЙ ГЛОБАЛЬНОЙ БЛОКИРОВКЕ ИНТЕРПРЕТАТОРА
Зайнутдинов М.М , Д.Г. Скоробогатов Д.Г., Хиль С.Ю., Орлов Д.А.
Многопоточность играет ключевую роль в современной разработке программного обеспечения, обеспечивая возможность параллельного выполнения задач и повышение производительности приложений. Многопоточное программирование становится особенно важным, поскольку современные процессоры являются многоядерными.
Однако в Python существует ограничение в виде глобальной блокировки интерпретатора (GIL). GIL является механизмом обеспечения потокобезопасности, но также становится преградой для эффективного использования многопоточности. В Python, из-за глобальной блокировки интерпретатора, одномоментно может выполняться только один поток, что ограничивает потенциал многоядерной обработки.
Для обеспечения высокой эффективности параллельного выполнения можно рассмотреть отключение GIL. Однако, отключение GIL может привести к возникновению ошибок в программе, таких как взаимная блокировка и эффект гонок [1].
Решением вышеописанных проблем является использование статических анализаторов. Анализаторы могут помочь обнаруживать ошибки и оптимизировать код для эффективного использования многопоточности. В рамках данной работы были рассмотрены четыре варианта программ, представляющих сценарии с взаимной блокировкой, включая ожидание процесса самого себя, взаимное ожидание друг друга, неосвобождение ресурса и получение блокировок в разных порядках, с целью анализа их обнаружения существующими статическими анализаторами в Python в контексте работы при отключенной GIL.
В рамках исследования использовались следующие статические анализаторы кода: mypy [2], pylint, flake8 и bandit.
По результатам анализа программных вариантов с взаимной блокировкой установлено, что ни один из использованных статических анализаторов не выявил ошибки взаимной блокировки. Таким образом, задача разработки инструментов для статического анализа программ, ориентированных на обнаружение ошибок, связанных с многопоточностью, является актуальной.
Литература
1. Sam Gross. Making the Global Interpreter Lock Optional in CPython. Python Enhancement Proposals. [Электронный ресурс] URL: https://peps.python.org/pep-0703/
2. 2. Jukka Lehtosalo. Mypy 1.7.0 documentation. [Электронный ресурс] URL: https://mypy.readthedocs.io/en/stable/