【Linux】协程简介

本文介绍了Linux中的协程概念,包括对称和非对称协程的区别,以及不同类型的协程栈(静态、分段、共享、虚拟内存栈)和调度策略(栈式、星切、环切)。还探讨了常见的协程库如boost.context、boost.coroutine、ucontext、fiber和libco/libgolibgo的特点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是协程?

首先回忆一下线程的概念:
线程是操作系统能够进行运算调度的最小单位。被包含在进程之中,是进程的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发执行多个线程,每个线程会执行不同的任务。

简介

  • 协程可以理解为一种用户态的轻量级线程,切换由用户定义,各任务之间可以控制执行暂停恢复函数,来达到多任务协作的目的;
  • 协程上下文切换速度快, 且不会陷入内核态
  • 协程拥有独立的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈,在来回切换时,恢复先前保存的寄存器上下文和栈。
  • 一个线程中可以有多个协程,协程是运行在线程之中的逻辑处理单元。协程在线程里的运行是串行的。
  • 协程之间的调度通过调度器或者自己主动放开对CPU的占有,让给其他协程。

优点

  • 协程具有极高的执行效率,由于子程序切换不是线程切换,是由程序自身控制,故协程没有线程切换的开销;
  • 多线程的线程数越多,协程的性能越显著
  • 访问共享资源不需要使用多线程的锁机制和变量冲突,由于只有一个线程,故在协程只需要判断状态即可,降低了编码难度;
  • 同步代码的方式写异步逻辑;

二、为什么使用协程?

为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现如下。即串行地接收连接、读取请求、处理、应答。该实现弊端显而易见,server同一时间只能为一个客户端服务。

while(1) {
   
   
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将月藏进诗尾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值