В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения ) |
Оригинальный автор(ы) | Кристиан Тисмер |
---|---|
Разработчик(и) | Ансельм Крюйс |
Первоначальный выпуск | 1998 ( 1998 ) |
Стабильный релиз | 3.8.1-slp [1] / 22 января 2020 г. ( 2020-01-22 ) |
Предварительный релиз | 3.9.0 альфа 0 |
Репозиторий |
|
Написано в | С , Питон |
Операционная система | 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 .
встроен планировщик циклического перебора. Его можно использовать для планирования тасклетов как совместно, так и с упреждением.