Бесстековый Python

Альтернативная реализация Python
Бесстековый Python
Оригинальный автор(ы)Кристиан Тисмер
Разработчик(и)Ансельм Крюйс
Первоначальный выпуск1998 ; 27 лет назад ( 1998 )
Стабильный релиз
3.8.1-slp [1]  / 22 января 2020 г. ; 5 лет назад ( 2020-01-22 )
Предварительный релиз
3.9.0 альфа 0
Репозиторий
  • github.com/stackless-dev/stackless
Написано вС , Питон
Операционная системаLinux , MacOS , Windows
ТипУстный переводчик
ЛицензияЛицензия Python Software Foundation
Веб-сайтgithub.com/stackless-dev

Stackless Python , или Stackless , — это интерпретатор языка программирования Python , названный так потому, что он избегает зависимости от стека вызовов C для своего собственного стека. На практике Stackless Python использует стек C, но стек очищается между вызовами функций. [2] Наиболее заметной особенностью Stackless являются микропотоки , которые позволяют избежать значительной части накладных расходов, связанных с обычными потоками операционной системы . В дополнение к функциям Python, Stackless также добавляет поддержку сопрограмм , каналов связи и сериализации задач .

Дизайн

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

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

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

Использовать

Хотя весь Stackless является отдельным дистрибутивом, его функциональность переключения была успешно упакована как расширение CPython под названием greenlet. [5] Он используется рядом библиотек (например, gevent [6] ) для предоставления зеленого потокового решения для CPython. С тех пор Python получил собственное решение для зеленых потоков: await /async.

Stackless широко используется в реализации многопользовательской онлайн-игры Eve Online , а также в почтовой платформе IronPort .

Смотрите также

Ссылки

  1. ^ "Release v3.8.1-slp". 12 августа 2021 г. Получено 8 марта 2022 г.
  2. Архивировано в Ghostarchive и Wayback Machine: История Python без стека. YouTube .
  3. ^ "About Stackless". Архивировано из оригинала 23 июня 2020 г. . Получено 26 августа 2016 г. . встроен планировщик циклического перебора. Его можно использовать для планирования тасклетов как совместно, так и с упреждением.
  4. ^ «Функции Stackless на уровне приложения — документация PyPy». pypy.readthedocs.org .
  5. ^ "greenlet: Легковесное параллельное программирование — документация greenlet 0.4.0". greenlet.readthedocs.org .
  6. ^ «Что такое gevent? - документация gevent 1.3.0.dev0» . www.gevent.org .
  • Официальный сайт
  • Документация Stackless Python для: 3.7-slp, 3.6-slp, 3.5-slp, 3.4-slp, 2.7-slp
  • без стека на GitHub
  • Многопоточный игровой скриптинг с помощью Stackless Python Гарри Калогиру
  • Продолжения и Stackless Python Кристиана Тизмера
Взято с "https://en.wikipedia.org/w/index.php?title=Stackless_Python&oldid=1268124943"