Безстековый Python - Stackless Python
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Оригинальный автор (ы) | Кристиан Тисмер |
---|---|
Разработчики) | Ансельм Круис |
изначальный выпуск | 1998 |
Стабильный выпуск | 3.7.4-slp, 3.6.9-slp, 2.7.16-slp / 4 августа 2019 г. |
Предварительный выпуск | 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 почтовая платформа.
Смотрите также
- Erlang (язык программирования)
- Limbo (язык программирования)
- Go (язык программирования)
- SCOOP (программное обеспечение)
Рекомендации
- ^ Язык программирования Stackless Python, Stackless Python, 14 ноября 2019 г., получено 2019-11-14
- ^ https://www.youtube.com/watch?v=pDkrkP0yf70
- ^ "О стеке". Получено 26 августа 2016.
встроен циклический планировщик. Его можно использовать для совместного или упреждающего планирования задач.
- ^ «Функции Stackless на уровне приложения - документация PyPy». pypy.readthedocs.org.
- ^ "greenlet: облегченное параллельное программирование - документация greenlet 0.4.0". greenlet.readthedocs.org.
- ^ "Что такое gevent? - документация gevent 1.3.0.dev0". www.gevent.org.
внешняя ссылка
- Официальный веб-сайт
- Документация по Python без стека для: 3,7-слп, 3,6-слп, 3,5-слп, 3,4-слп, 2,7-слп
- без стека на GitHub
- Многопоточные игровые сценарии с использованием Stackless Python Гарри Калогиру
- Продолжение и безстековый Python Кристиан Тисмер