云风coroutine源码分析

前言

现在C++的开发开始流行使用coroutine,也就是协程。我看腾讯的几个开源项目里面都有协程的实现。使用协程可以用同步的写法,达到异步的性能。它的基本原理其实就是在IO等待的时候切换出去,在适当的时刻再切换回来。云风用200行代码实现了一个最简单的协程,我们先看这个代码了解一下协程的原理,然后再看微信的libco实现。

协程简单介绍

协程可以理解为一个用户级的线程,一个线程里跑多个协程。协程分为对称协程非对称协程,对称协程就是当协程切换的时候他可以切换到任意其他的协程,比如goroutine,而非对称协程只能切换到调用他的调度器。这里实现的是一个非对称协程。

coroutine源码分析

详细的注释代码在coroutine源码注释
我们先来看一下头文件

#define COROUTINE_DEAD 0  //协程状态
#define COROUTINE_READY 1
#define COROUTINE_RUNNING 2
#define COROUTINE_SUSPEND 3

struct schedule; //协程调度器

typedef void (*coroutine_func)(struct schedule *, void *ud); //协程执行函数

struct schedule * coroutine_open(void); //创建协程调度器
void coroutine_close(struct schedule *); //关闭协程调度器

int coroutine_new(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值