基于ucontext_t实现的非对称协程,本章对应源码:zhongluqiang/sylar-from-scratch at 4419dbda8cf40d9b9d3bb0b0b14242a4d1b8aa2c。
协程概述
参考以下链接:
libaco: 一个极速的轻量级 C 非对称协程库 🚀 (10 ns/ctxsw + 一千万协程并发仅耗内存 2.8GB + Github Trending) - 燕云 - 博客园
一文彻底弄懂C++开源协程库libco——原理及应用 - 知乎
NtyCo的实现 · wangbojing/NtyCo Wiki
建议初学者在开始学习协程时,不要尝试深入x86/x64体系和汇编语言去了解协程上下文和协程切换原理,只需要了解协程是什么,协程上下文和协程切换是怎么回事即可。另外,特别说明,NtyCo的配套视频又臭又长,不要去看。
ucontext_t接口
sylar协程模块设计
sylar协程模块实现
注意事项
...
非对称协程,每个线程的入口函数作为主协程,其他协程为子协程,协程只能在主协程和子协程之间进行切换,不能在子协程与子协程之间切换。所对,这个协程模块最大的一点限制是,子协程不能创建并运行子协程,所有的协程都只能由主协程进行创建并调用。这个限制在引入调度器后可以通过调度器接口来规避掉,在使用调度器时,协程可以通过向调度器添加调度任务的方式来启动新的协程。
...