boost的协程切换分析

主要有两个接口,一个make_fcontext(),一个jump_fcontext()

相比ucontext,boost的切换模式,少了单独对context进行保存(getcontext)和切换(setcontext)过程,而是把两者合并到一起,通过jump_fcontext接口实现直接切换

这样做有个好处,就是更加容易进行优化,使得整个切换过程更加的紧凑

boost的context和stack是一起的,栈底指针就是context,设计非常巧妙,切换context就是切换stack,一举两得,但是这样每次切换就必须更新context

因为每次切换context后,context地址都会变掉。

现在可以和ucontext对比下,就可以看出,这种切换方式的一些优势:

  1. 保存和恢复寄存器数据,在一个切换接口中,更加容易进行优化
  2. 通过stack基栈作为context,切换栈相当于切换了context,一举两得,指令数更少
  3. 对参数、可变寄存器没去保存,仅保存部分必须的寄存器,进一步减少指令数
posted @ 2023-09-08 20:01  misaka-mikoto  阅读(123)  评论(0编辑  收藏  举报