Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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 (программное обеспечение)

Ссылки [ править ]

  1. ^ Язык программирования Stackless Python , Stackless Python, 14 ноября 2019 г. , получено 14 ноября 2019 г.
  2. ^ https://www.youtube.com/watch?v=pDkrkP0yf70
  3. ^ «О стеке» . Проверено 26 августа +2016 . встроен циклический планировщик. Его можно использовать для совместного или упреждающего планирования задач.
  4. ^ «Функции Stackless на уровне приложения - документация PyPy» . pypy.readthedocs.org .
  5. ^ "greenlet: облегченное параллельное программирование - документация greenlet 0.4.0" . greenlet.readthedocs.org .
  6. ^ «Что такое 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 Кристиана Тисмера