可以再想一下,协程切换在汇编层面看起来真是更简单不过了。看楼上 pfan117 的汇编代码:
https://gitee.com/pfan117/libmco/blob/master/switch-ctx.S
除了中间保存 FPU 的 stmxcsr,fnstcw 和恢复 FPU 的 ldmxcsr,fldcw 四个指令外,就是一堆的 mov 指令同样用于保存/恢复寄存器,最后一个 jmp 切换成功,剩下的没了。
通常的协程库所谓的封装其实只是多干两件事情:申请用于保存寄存器的内存和栈空间,销毁它们。
qtng 又多干了几件事:申请内存时用上 MAP_GROWSDOWN 标志以节约内存,切换后检测并抛出异常,协程结束后返回事件循环,维护状态供事件循环使用。
【 在 billybear04 (billybear04) 的大作中提到: 】
: :实现协程确实很简单,那个 PDF 没骗你
: 1. 对你们可能简单,对我可不一定
: 2. 我一点说人骗我的意思都没有,行文风格:-)使然而已。
: ...................
--
FROM 117.24.206.*