版本比较

标识

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

...

以上协程库最好跑一下测试用例,感受一下协程的使用。

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

看了上面的链接还不了解协程的可以往下看。


最简单的理解,可以将协程当成是一种看起来花里胡哨,并且使用起来也花里胡哨的函数。协程的本质就是被包装起来的函数和函数的运行状态,称为协程上下文。因为每个协程在创建时一定会指定一个入口函数,这点和线程完全一样。协程和函数的不同之处是,函数一旦被调用,只能从头开始执行,直到函数执行结束退出,而协程则可以执行到一半就退出(称为yield),但此时协程并未结束,它可以在后面适当的时机再重新被恢复(称为resume),在这段时间间隔内可以运行其他的协程,所以协程也被称为用户态线程。


简单来说,协程就是用户态线程。从使用上来说,协程和线程确实有许多相似的地方,比如,协程和线程都有自己的入口函数和执行栈,线程之间可以切换执行,协程之间也可以切换执行。但是,线程和协程是有本质区分的。

简单来说,协程就是用户态线程,想当于用户自己实现。协程切换最重要的就是协程上下文,它代表了函数的执行状态。

协程原语

ucontext_t接口


sylar协程模块设计

非对称协程。

sylar协程模块实现


注意事项




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

...