Безстековый Python - Stackless Python

Безстековый Python
Автор (ы) оригинала Кристиан Тисмер
Разработчики) Ансельм Круис
Первый выпуск 1998 ; 23 года назад  ( 1998 )
Стабильный выпуск
3.7.5-slp, 3.6.9-slp, 2.7.17-slp / 22 января 2020 г . ; 15 месяцев назад  ( 2020-01-22 )
Предварительный выпуск
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 .

Смотрите также

Рекомендации

Внешние ссылки