Безстековый Python - Stackless Python

Безстековый Python
Оригинальный автор (ы)Кристиан Тисмер
Разработчики)Ансельм Круис
изначальный выпуск1998; 22 года назад (1998)
Стабильный выпуск
3.7.4-slp, 3.6.9-slp, 2.7.16-slp / 4 августа 2019 г.; 16 месяцев назад (2019-08-04)
Предварительный выпуск
3.8.0b3[1]
Репозиторий Отредактируйте это в Викиданных
Написано вC, Python
Операционная системаLinux, Windows
ТипУстный переводчик
ЛицензияЛицензия Python Software Foundation
Интернет сайтhttp://www.stackless.com

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

Дизайн

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

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

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

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

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

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

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

Рекомендации

  1. ^ Язык программирования Stackless Python, Stackless Python, 14 ноября 2019 г., получено 2019-11-14
  2. ^ https://www.youtube.com/watch?v=pDkrkP0yf70
  3. ^ "О стеке". Получено 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.

внешняя ссылка