定义
协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。
一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。
协程的特点:
与线程有几点不同
1 线程调度由内核完成,而协程完全处于用户态
2 线程拥有自己的线程资源和执行栈,各线程互不干扰,而协程则更像一个函数,主要通过保存函数栈和恢复函数栈来实现。
几种实现方式
1 coroutine(云风)
该方式基于ucontext实现,特点是非常简洁易用。
2 colib
colib最大的特点是hook了socket族函数,如果原先是阻塞式,会自动改为非阻塞式执行,在用户侧基本无感知。(个人认为hiredis的那些同步接口也可以如此实现)。