C++协程

本文介绍了C++协程的产生背景、与多线程和异步IO的对比,以及协程如何处理IO密集型任务。协程在执行效率和资源利用上优于多线程,逻辑上类似同步IO,但性能接近异步IO。文中还探讨了有栈和无栈协程的实现机制及其优缺点。

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

产生背景

对于后台开发我们一个重要问题即使用尽可能少的服务器资源处理海量的请求,除了我们再架构上做多机自动扩容外,我们还必须尽可能提高单机硬件的利用率(CPU利用率+IO利用率)

为了提高硬件的利用率往往我们采用三种技术路径:

  • 多线程
  • 异步IO
  • 协程

协程和异步IO以及多线程的对比

多线程

多线程可以充分利用CPU的多核,实现真正的并行,它是操作系统的基础设施。但是线程是一个粗粒度、相对比较笨重的多任务的抽象机制,例如以下几个特点

  • 创建线程非常耗时
  • 线程上下文切换非常耗时(要从用户态切换到内核态;保存当前线程执行环境;加载目标线程的执行环境;再从内核态切换回来等一系列操作)
  • 每个线程会预先分配一个几M的调用栈
  • 系统中最多只能同时运行数千个线程(当就绪线程个数远大于CPU核数,操作系统大量的时间就会用来进行线程切换,性能急剧下降)

异步IO

操作系统中有两种IO:同步IO和异步IO(5种I/O模型)

同步IO:发起IO(比如read)后,CPU必须原地等待其结束,然后才能继续往下执行

异步IO:发起IO(比如read)前,会先注册一个回调函数;发起IO后,CPU无需原地等待其完成,而是继续往下执行

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值