协程的核心就是上下文切换,故以此为 Swoole 源码分析的开篇。Swoole 与 Fiber 都采用了 boost 库中协程上下文切换( context switch )的实现代码,在这一点上两者完全相同。

占坑。。。 抽空再来写完。。。

查阅 boost 协程 context 文档

协程栈

boost 协程基础用法

boost 协程双向通信

Swoole 中的协程上下文( context )

Fiber 中的上下文切换

Swoole 协程上下文切换实现原理

linux 上的 AT&T 记法

x64 汇编基础

swoole_make_fcontext 汇编源码分析

swoole_jump_fcontext 汇编源码分析

思考:为什么要保存所有约定不变寄存器

梳理 Swoole 协程上下文切换整体流程

从 main 进入协程函数

从协程函数 jmp 回 main

从一个协程函数 jmp 到另一个协程函数

从一个协程函数 jmp 出后再 jmp 回去

从一个协程函数 return

分析 swoole::corutine::Context

swoole 协程栈的申请与释放

swap_in() 与 swap_out()

swoole 协程工作函数与参数封装

swap_out() 后,执行流到哪里了

swap_in() 后,执行流从哪里恢复

总结