使用ucontext系列接口实现协程功能。
非对称协程,每个线程的入口函数作为主协程,其他协程为子协程,协程只能在主协程和子协程之间进行切换,不能在子协程与子协程之间切换。所对,这个协程模块最大的一点限制是,子协程不能创建并运行子协程,所有的协程都只能由主协程进行创建并调用。这个限制在引入调度器后可以通过调度器接口来规避掉,在使用调度器时,协程可以通过向调度器添加调度任务的方式来启动新的协程。
在非对称协程的实现中,每个线程永远只关心两个协程(由线程局部变量记录),一个是线程主函数的协程,另一个是子协程,在任意时间,要么主协程在前台运行、子协程在后台等待,要么子协程在前台运行、主协程在后台等待,绝对不会出现在前台运行和后台等待的协程都是子协程的情况。
协程:用户态的线程,相当于线程中的线程,更轻量级。后续配置socket hook,可以把复杂的异步调用,封装成同步操作。降低业务逻辑的编写复杂度。 目前该协程是基于ucontext_t来实现的,后续将支持采用boost.context里面的fcontext_t的方式实现。
协程原语:
`resume`:恢复,使协程进入执行状态
`yield`: 让出,协程让出执行权
yield和resume是同步的,也就是,一个协程的resume必然对应另一个协程的yield,反之亦然,并且,一条线程同一时间只能有一个协程是执行状态。