Stackless Python

Stackless Python或称简称Stackless,是一个Python编程语言解释器,这么称呼的原因是它避免了依赖C调用栈为自己的堆栈。在实际中,Stackless Python使用了C堆栈,但是这个堆栈在函数调用之间是被清除的[2]。Stackless Python的最突出特征是微线程,它避免了与操作系统线程有关的大量开销。在Python特征之外,Stackless还增加了协程、通信通道和任务序列化

Stackless Python
原作者Christian Tismer
開發者Anselm Kruis
首次发布1998年1998
当前版本
  • 3.8.1-slp (2021年8月12日)[1]
源代码库
编程语言C, Python
操作系统Linux, Windows
类型解释器
许可协议Python软件基金会许可证
网站github.com/stackless-dev/stackless/wiki 编辑维基数据

设计

对于Stackless Python,一个运行的程序被分解成微线程,由语言解释器自身而非操作系统内核管理,上下文切换任务调度纯粹在解释器内完成,因而可以被视作是一种形式的绿色线程。微线程管理在同一个CPU核心上一个程序的不同子任务的执行,Stackless Python不移除Python的全局解释器锁, 也不使用多线程或多进程。所以它只允许在一个共享CPU核心上的协作式多任务而非并行,最初不能获得而现在有了某种形式的抢占[3]

由于相当数量的源代码变更,Stackless Python不能在现存的Python安装上作为一个扩展来安装。它自身是完整的Python发行。大多数的Stackless Python的特征也在PyPy中实现了,它是自我寄宿的Python解释器和JIT编译器[4]

使用

尽管整个Stackless Python是一个独立发行,它的上下文切换功能已经成功的打包为叫做greenlet的CPython扩展[5]。它被用在很多库,比如gevent[6],用来提供CPython的绿色线程解决方案。Python现在已经接受了对绿色线程的原生解决方案:async/await

Stackless Python广泛的使用在大规模多玩家在线游戏Eve Online的实现和IronPort的邮件平台。

引用

  1. . 2021年8月12日 [2022年3月8日].
  2. . [2020-09-30]. (原始内容存档于2020-08-29).
  3. . [26 August 2016]. (原始内容存档于2020-06-23). a round robin scheduler is built in. It can be used to schedule tasklets either cooperatively or preemptively.
  4. . pypy.readthedocs.org. [2020-09-30]. (原始内容存档于2016-04-13).
  5. . greenlet.readthedocs.org. [2020-09-30]. (原始内容存档于2016-04-16).
  6. . www.gevent.org. [2020-12-09]. (原始内容存档于2020-09-16).

参閱

  • Erlang
  • Limbo (程式语言)
  • Go
  • SCOOP (软件)

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.