协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。
最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boost, libco, libgo等等。
他们都属于stackfull协程,每个协程有完整的私有堆栈,里面的核心就是上下文切换(context),而stackless的协程,比较出名的有protothreads,这个比较另类,有兴趣的同学可以去看下源码,这里就不多说了。
那么现有协程库,是怎么去实现context切换的呢,目前主要有以下几种方式:
使用ucontext系列接口,例如:libtask
使用setjmp/longjm
继续阅读 »