PyPy中的无栈与PyPy+greenlet的区别
新的PyPy版本带来了集成的Stackless。据我所知,这个内置的Stackless和2001年推出的原版Stackless不太一样,后者有“继续执行”的功能。所以主要是提供了一种绿色线程框架和调度器。
Greenlet是Stackless的一个衍生版本,它作为一个扩展模块提供了Stackless的绿色线程功能。
使用“原生”的Stackless(来自PyPy)有什么好处吗?比起使用PyPy + greenlet加上某个调度器(比如说gevent)?或者说,我不能在PyPy中使用这些类型的扩展吗?更具体一点:我知道PyPy有自己实现的greenlet(基于continulet)。但我很好奇能否将外部的greenlet与gevent和PyPy内部的greenlet连接起来。
PyPy是否自带一个异步IO库,供Stackless使用,而不是使用标准的库?
我了解stackless本身以及其他一些异步轻线程的扩展(比如eventlet、gevent、twisted等)。所以我并不是想了解它们之间的区别,而是想知道使用内置stackless的PyPy有什么优势。
1 个回答
PyPy是否自带一个异步IO库,可以用来替代标准库中的Stackless?
从PyPy 2.6.1和PyPy3 2.4.0开始,你可以使用asyncio(通过pypi包)来替代Stackless中的异步功能。
使用PyPy自带的“原生”Stackless有什么好处,相比于PyPy + greenlet + 一些调度器?
除了Stackless API更丰富(比如可以对微线程进行序列化)之外,速度也是一个优势,因为调度器是用C语言写在运行时中的。基准测试应该能清楚地显示这一点。
想了解更多关于Stackless的信息,可以看看这篇文章 什么是Stackless?