Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Автор (ы) оригинала | Кристиан Тисмер |
---|---|
Разработчики) | Ансельм Круис |
изначальный выпуск | 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 |
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 .
См. Также [ править ]
- Erlang (язык программирования)
- Limbo (язык программирования)
- Go (язык программирования)
- SCOOP (программное обеспечение)
Ссылки [ править ]
- ^ Язык программирования Stackless Python , Stackless Python, 14 ноября 2019 г. , получено 14 ноября 2019 г.
- ^ 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-slp , 3.6-slp , 3.5-slp , 3.4-slp , 2.7-slp
- без стека на GitHub
- Многопоточные игровые сценарии с использованием Stackless Python от Гарри Калогиру
- Продолжения и Stackless Python Кристиана Тисмера