Безстековый Python - Stackless Python
| Автор (ы) оригинала | Кристиан Тисмер |
|---|---|
| Разработчики) | Ансельм Круис |
| Первый выпуск | 1998 |
| Стабильный выпуск | 3.7.5-slp, 3.6.9-slp, 2.7.17-slp / 22 января 2020 г .
|
| Предварительный выпуск | 3.8.0b3
|
| Репозиторий |
|
| Написано в | C , Python |
| Операционная система | Linux , Windows |
| Тип | Устный переводчик |
| Лицензия | Лицензия Python Software Foundation |
| Веб-сайт | http://www.stackless.com |
Stackless Python или Stackless - это интерпретатор языка программирования Python , названный так потому, что он избегает зависимости от стека вызовов C для своего собственного стека. На практике Stackless Python использует стек C, но между вызовами функций стек очищается. Самая заметная особенность Stackless - это микропотоки , которые позволяют избежать значительных накладных расходов, связанных с обычными потоками операционной системы . В дополнение к функциям Python, Stackless также добавляет поддержку сопрограмм , каналов связи и сериализации задач .
Дизайн
В Stackless Python выполняющаяся программа разбивается на микропотоки, которые управляются самим интерпретатором языка, а не ядром операционной системы - переключение контекста и планирование задач выполняется исключительно в интерпретаторе (таким образом, они также рассматриваются как форма зеленого потока ) . Микропотоки управляют выполнением различных подзадач в программе на одном ядре ЦП. Таким образом, они являются альтернативой асинхронному программированию на основе событий, а также позволяют избежать накладных расходов, связанных с использованием отдельных потоков для одноядерных программ (поскольку не требуется переключение режима между пользовательским режимом и режимом ядра, поэтому использование ЦП может быть уменьшено).
Хотя микропотоки упрощают выполнение подзадач на одном ядре, Stackless Python не удаляет глобальную блокировку интерпретатора CPython и не использует несколько потоков и / или процессов. Таким образом, он допускает только совместную многозадачность на общем процессоре, а не параллелизм (приоритетное обслуживание изначально было недоступно, но теперь в той или иной форме). Чтобы использовать несколько ядер ЦП, все равно необходимо построить систему межпроцессного взаимодействия поверх процессов Stackless Python.
Из-за значительного количества изменений в исходном коде Stackless Python нельзя установить на уже существующую установку Python в качестве расширения или библиотеки . Напротив, это сам по себе полный дистрибутив Python. Большинство функций Stackless также были реализованы в PyPy , интерпретаторе Python на собственном хостинге и JIT-компиляторе .
Использовать
Хотя весь Stackless представляет собой отдельный дистрибутив, его функции переключения были успешно упакованы в виде расширения CPython, называемого greenlet. Он используется рядом библиотек (например, gevent) для обеспечения зеленого решения для многопоточности CPython. С тех пор Python получил собственное решение для зеленых потоков: await / async.
Stackless широко используется при реализации многопользовательской сетевой игры Eve Online, а также в почтовой платформе IronPort .
Смотрите также
- Erlang (язык программирования)
- Limbo (язык программирования)
- Go (язык программирования)
- SCOOP (программное обеспечение)
Рекомендации
Внешние ссылки
-
Официальный веб-сайт
- Документация по Python без стека для: 3.7-slp , 3.6-slp , 3.5-slp , 3.4-slp , 2.7-slp
- без стека на GitHub
- Многопоточные игровые сценарии с использованием Stackless Python от Гарри Калогиру
- Продолжения и Stackless Python Кристиана Тисмера