版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

基于ucontext_t实现的非对称协程,本章对应源码:zhongluqiang/sylar-from-scratch at 4419dbda8cf40d9b9d3bb0b0b14242a4d1b8aa2c

协程概述

参考以下链接:

C++ 协程的近况、设计与实现中的细节和决策 - 简书

微信开源C++Libco介绍与应用(一) - 知乎

微信开源C++Libco介绍与应用(二) - 知乎

libaco: 一个极速的轻量级 C 非对称协程库 🚀 (10 ns/ctxsw + 一千万协程并发仅耗内存 2.8GB + Github Trending) - 燕云 - 博客园

一文彻底弄懂C++开源协程库libco——原理及应用 - 知乎

NtyCo的实现 · wangbojing/NtyCo Wiki

建议初学者在开始学习协程时,不要尝试深入x86/x64体系和汇编语言去了解协程上下文和协程切换原理,只需要了解协程是什么,协程上下文和协程切换是怎么回事即可。另外,特别说明,NtyCo的配套视频又臭又长,不要去看。

ucontext_t接口


sylar协程模块设计


sylar协程模块实现


注意事项

...




非对称协程,每个线程的入口函数作为主协程,其他协程为子协程,协程只能在主协程和子协程之间进行切换,不能在子协程与子协程之间切换。所对,这个协程模块最大的一点限制是,子协程不能创建并运行子协程,所有的协程都只能由主协程进行创建并调用。这个限制在引入调度器后可以通过调度器接口来规避掉,在使用调度器时,协程可以通过向调度器添加调度任务的方式来启动新的协程。

...