1、上下文切换方式
a) linux 接口 getcontext、makecontext、swapcontext、setcontext;
b) boost Context 库;(Boost.Coroutine 库)
c) 汇编, 类似 setjump , longjump
这里为了深入理解,采用 第三种方式 .
协程切走伪代码:
save 上下文
if( 0 == asm setjmp )
{
//执行调度器的代码逻辑
}
else
{ //调度器恢复上下文,返回
}
协程恢复伪代码:
longjmp(1)