Бесстековый Python
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оригинальный автор(ы) | Кристиан Тисмер |
---|---|
Разработчик(и) | Ансельм Кросс |
Первоначальный выпуск | 1998 год |
Стабильная версия | 3.8.1-слп [1] / 22 января 2020 г |
Предварительный выпуск | 12 августа 2021 г |
Репозиторий | |
Написано в | С , Питон |
Операционная система | Linux , MacOS , Windows |
Тип | Устный переводчик |
Лицензия | Лицензия Фонда программного обеспечения Python |
Веб-сайт | www |
Stackless Python , или Stackless , — это интерпретатор языка программирования Python , названный так потому, что он не зависит от C стека вызовов для своего собственного стека. На практике Stackless Python использует стек C, но стек очищается между вызовами функций. [2] Наиболее заметной особенностью Stackless являются микропотоки , которые позволяют избежать большей части накладных расходов, связанных с обычными потоками операционной системы . Помимо возможностей Python, Stackless также добавляет поддержку сопрограмм , каналов связи и сериализации задач .
Дизайн
[ редактировать ]В Stackless Python выполняющаяся программа разбивается на микропотоки, которые управляются самим интерпретатором языка, а не ядром операционной системы — переключение контекста и планирование задач выполняются исключительно в интерпретаторе (поэтому они также рассматриваются как форма зеленого потока ). . Микропотоки управляют выполнением различных подзадач в программе на одном ядре ЦП. Таким образом, они являются альтернативой асинхронному программированию на основе событий, а также позволяют избежать накладных расходов, связанных с использованием отдельных потоков для одноядерных программ (поскольку не требуется переключение режима между пользовательским режимом и режимом ядра, поэтому можно уменьшить загрузку ЦП).
Хотя микропотоки облегчают выполнение подзадач на одном ядре, Stackless Python не удаляет глобальную блокировку интерпретатора 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 почтовой платформе .
См. также
[ редактировать ]- Эрланг (язык программирования)
- Лимбо (язык программирования)
- Го (язык программирования)
- СОВОК (программное обеспечение)
Ссылки
[ редактировать ]- ^ «Выпуск v3.8.1-slp» . 12 августа 2021 г. Проверено 8 марта 2022 г.
- ^ Архивировано в Ghostarchive и Wayback Machine : История бесстекового Python . Ютуб .
- ^ «О Stackless» . Архивировано из оригинала 23 июня 2020 года . Проверено 26 августа 2016 г.
встроен планировщик циклического перебора. Его можно использовать для планирования тасклетов как совместно, так и упреждающе.
- ^ «Функции Stackless на уровне приложения — документация PyPy» . pypy.readthedocs.org .
- ^ «greenlet: облегченное параллельное программирование — документация greenlet 0.4.0» . greenlet.readthedocs.org .
- ^ «Что такое вентилируемое? — вентилируемая документация 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 , Кристиан Тизмер