【Linux】协程简介
一、什么是协程?
首先回忆一下线程的概念:
线程是操作系统能够进行运算调度的最小单位。被包含在进程之中,是进程的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发执行多个线程,每个线程会执行不同的任务。
简介
- 协程可以理解为一种用户态的轻量级线程,切换由用户定义,各任务之间可以控制执行、暂停、恢复函数,来达到多任务协作的目的;
- 协程上下文切换速度快, 且不会陷入内核态;
- 协程拥有独立的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈,在来回切换时,恢复先前保存的寄存器上下文和栈。
- 一个线程中可以有多个协程,协程是运行在线程之中的逻辑处理单元。协程在线程里的运行是串行的。
- 协程之间的调度通过调度器或者自己主动放开对CPU的占有,让给其他协程。
优点
- 协程具有极高的执行效率,由于子程序切换不是线程切换,是由程序自身控制,故协程没有线程切换的开销;
- 多线程的线程数越多,协程的性能越显著;
- 访问共享资源不需要使用多线程的锁机制和变量冲突,由于只有一个线程,故在协程只需要判断状态即可,降低了编码难度;
- 以同步代码的方式写异步逻辑;
二、为什么使用协程?
为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现如下。即串行地接收连接、读取请求、处理、应答。该实现弊端显而易见,server同一时间只能为一个客户端服务。
while(1) {