跳转到内容

Stackless Python

维基百科,自由的百科全书
Stackless Python
原作者Christian Tismer
开发者Anselm Kruis
首次发布1998年,​26年前​(1998
当前版本v3.8.1-slp(2021年8月12日,​3年前​(2021-08-12
源代码库 编辑维基数据链接
编程语言C, Python
操作系统Linux, Windows
类型解释器
许可协议Python软件基金会许可证
网站github.com/stackless-dev/stackless/wiki 编辑维基数据

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

设计

[编辑]

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

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

使用

[编辑]

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

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

引用

[编辑]
  1. ^ 存档副本. [2020-09-30]. (原始内容存档于2020-08-29). 
  2. ^ About Stackless. [26 August 2016]. (原始内容存档于2020-06-23). a round robin scheduler is built in. It can be used to schedule tasklets either cooperatively or preemptively. 
  3. ^ Application-level Stackless features — PyPy documentation. pypy.readthedocs.org. [2020-09-30]. (原始内容存档于2016-04-13). 
  4. ^ greenlet: Lightweight concurrent programming — greenlet 0.4.0 documentation. greenlet.readthedocs.org. [2020-09-30]. (原始内容存档于2016-04-16). 
  5. ^ What is gevent? — gevent 1.3.0.dev0 documentation. www.gevent.org. [2020-12-09]. (原始内容存档于2020-09-16). 

参阅

[编辑]

外部链接

[编辑]