greenlet switch原理猜测

其实说是greenlet之间跳转执行,根本应该是generator之间的跳转执行。那么它们之间跳转执行,是怎么进行上下文转换的呢?


下面为猜想啊:

    每个generator都包含下面信息

    original_esp 存放执行next()之前esp的,用于从generator返回时,恢复原来esp指。

    stack 栈,初始化的generator为空,跳入generator执行时,会存放调用函数的环境,它的作用可以想象为与进程的栈作用一样。

    pause_esp 当generator暂停执行时,存放暂停之前的esp值,这样当generator恢复执行时,将esp寄存器设为该指,即可快速恢复generator执行坏境。

    eax 寄存器可用于在generator之间传递返回值。


纠正:

       原本以为python协程都是用generator实现的,看了greenlet后,发现不是。greenlet是直接通过C实现的,以模块的形式加载进python解释器。不过原理跟上面解释的应该差不多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值