Stackless Python
Тип интерпретатор языка программирования Python
Разработчики Кристиан Тисмер[1] и соавторы[2]
Написана на Python[5] и Си[6]
Операционные системы Linux, macOS, Windows, PSP OS[3]
Последняя версия
Тестовая версия 3.9.0 alpha 0 [4] (11 августа 2021)
Репозиторий github.com/stackless-dev…
Состояние Разработка прекращена
Лицензия Python Software Foundation License
Сайт github.com/stackless-dev…

Stackless Python, или просто Stackless — версия интерпретатора языка программирования Python, названная так из-за отказа от использования стандартного стека вызовов языка Си в пользу собственного стека. Наиболее впечатляющей особенностью Stackless являются микропотоки (англ. microthreads), которые позволяют избежать чрезмерного расхода системных ресурсов, присущего стандартным потокам операционной системы. В дополнение к стандартным возможностям Python, Stackless добавляет поддержку сопрограмм, коммуникационных каналов и сериализации задач.

Микропотоками интерпретатор Stackless управляет самостоятельно. Это способствует уменьшению дополнительных расходов системных ресурсов на потоки и может значительно уменьшить нагрузку центрального процессора в некоторых ситуациях, когда количество потоков очень велико.

Из-за значительного числа изменений в исходных текстах оригинального CPython Stackless не может устанавливаться как библиотека или расширение интерпретатора, поэтому он распространяется как отдельный интерпретатор Python.

Особенности реализации

править

При помощи Stackless Python запущенная программа разбивается на микропотоки, которые управляются самим интерпретатором языка, а не ядром операционной системыпереключение контекста и планирование задач выполняются исключительно в интерпретаторе (таким образом, они также рассматриваются как форма зеленого потока). Микропотоки управляют выполнением различных подзадач в программе на одном и том же ядре процессора. Таким образом, они являются альтернативой асинхронному программированию на основе событий, а также позволяют избежать накладных расходов, связанных с использованием отдельных потоков для одноядерных программ (поскольку переключение режимов между пользовательским режимом и режимом ядра не требуется, поэтому загрузка процессора может быть уменьшена).

Несмотря на то, что микропотоки облегчают выполнение подзадач на одном ядре, Stackless Python всё равно использует глобальную блокировку интерпретатора (GIL) CPython и не использует несколько потоков и/или процессов. Таким образом, Stackless Python допускает только совместную многозадачность на общем процессоре, а не параллелизм (вытеснение изначально было недоступно, но теперь доступно в той или иной форме). Чтобы использовать несколько процессорных ядер, все равно потребуется создать систему межпроцессной связи поверх процессов Stackless Python.

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

Примечания

править
  1. Cameron Laird, Introduction to Stackless Python. Дата обращения: 8 августа 2012. Архивировано из оригинала 18 августа 2012 года.
  2. Commits. Дата обращения: 11 ноября 2021. Архивировано 11 ноября 2021 года.
  3. This is the port of Python programming language to the Sony PSP console. Дата обращения: 8 августа 2012. Архивировано 28 июля 2012 года.
  4. Репозиторий. Дата обращения: 7 ноября 2018. Архивировано 23 марта 2019 года.
  5. The stackless Open Source Project on Open Hub: Languages Page — 2006.
  6. https://www.openhub.net/p/stackless/analyses/latest/languages_summary
  7. Release v3.8.1-slp — 2021.

Ссылки

править

📚 Artikel Terkait di Wikipedia

Python

Тем не менее, Python портирован на некоторые относительно малопроизводительные платформы. Интерпретатор Python в CPython (а также Stackless и PyPy) использует

CPython

Python: Jython, IronPython, PyPy и Stackless Python. В PEP 11 перечислены платформы, которые более не поддерживаются Python Software Foundation. Тем не менее

Канал (программирование)

библиотеке libthread языка программирования Си в ОС Plan 9, а также в Stackless Python и языке Go. Каналы, созданные по аналогии с моделью CSP, являются синхронными:

Сопрограмма

стали зарезервированными ключевыми словами. Eventlet Greenlet gevent Stackless Python import asyncio from asyncio import Task async def main() -> None: task1:

PyPy

интерпретатор языка программирования Python. PyPy в начале своего существования был интерпретатором Python, написанным на Python. Текущие версии PyPy транслируются

Limbo

Разработчик Лаборатории Белла Система типов строгая Испытал влияние C, CSP, Alef Повлиял на Stackless Python, Go, Rust Сайт vitanuova.com/inferno/li…

Зелёные потоки

Оккам Ruby до версии 1.9 SML/NJ реализации Concurrent ML Smalltalk Stackless Python — поддерживает вытесняющую многозадачность или кооперативную многозадачность