跟进程和线程放在一起,只不过相比其他两个更少的关注度。
定义:
一种用户态的轻量级线程,完全由用户调度控制,拥有自己的寄存器上下文和栈,协程调度切换的时候,先将寄存器上下文和栈保存到其他地方,切换回来的时候再恢复之前保存的寄存器上下文和栈。直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
但是同一时间只能执行一个协程,大致来说是一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态,适合对任务进行分时处理;而线程,一次可以执行多个线程,适合执行多任务处理。
与线程的区别:
线程和协同程序的主要不同在于:在多处理器情况下,从概念上来讲多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起。