Как реализованы greenlets? Python использует стек C для интерпретатора, а heap - выделяет фреймы стека Python, но помимо этого, как он выделяет/свопирует стеки, как он подключается к механизмам интерпретатора и функции, и как это взаимодействует с расширениями C? (Любые причуды)?
Есть некоторые комментарии в верхней части greenlet.c в источнике, но они немного непрозрачны. FWIW Я исхожу из перспективы того, кто не знаком с внутренними компонентами CPython, но хорошо знаком с низкоуровневым системным программированием, C, потоками, событиями, сопрограммами/совместными потоками, программированием ядра и т.д.
(Некоторые точки данных: они не используют ucontext.h, и они делать 2x memcpy, выделять и свободно на каждом переключателе контекста.)