【发布时间】:2019-02-12 00:28:07
【问题描述】:
greenlets 是如何实现的? Python 使用 C 堆栈作为解释器并堆分配 Python 堆栈帧,但除此之外,它如何分配/交换堆栈,它如何挂钩到解释器和函数调用机制,以及它如何与 C 扩展交互? (有什么怪癖)?
源码中greenlet.c 的顶部有一些cmets,但它们有点不透明。 FWIW 我是从不熟悉 CPython 内部但非常熟悉低级系统编程、C、线程、事件、协程/协作线程、内核编程等的人的角度来的。
(一些数据点:don't use ucontext.h 和do 2x memcpy, alloc, and free on every context switch。)
【问题讨论】:
标签: python