【协程异步库】

项目工作:

  • 封装异步任务:Task作为协程函数的返回值,支持co_await,获取结果(通过promise_type实现)。Task::promise_type除实现常见的函数外,还可以作为调度对象。
  • 支持异步语法:
    • 对单个Task: 可调用co_await(等待直到就绪)、也可以调用wait_for(超时句柄加入调度,就绪时取消句柄)。
    • 对多个Task: 可调用gather等待多个Task完成(依次co_await多个Task,成功的,将返回值设置到tuple返回,否则设置异常)。
    • wait_for和gather都是通过awaiter完成的。
  • 协程调度:线程可以获取eventloop,eventloop提供定时器、协程句柄调度
    • 定时器:通过堆来对定时器事件排序。call later\at\soon将句柄加入调度(可以为超时句柄、协程句柄)
    • eventloop:while循环:epoll、定时器事件处理、就绪事件处理
    • 协程需要等待读写事件,co_await eventloop.wait_event(), 加入到epoll监听,将协程句柄作为事件的回调函数
    • 协程调度:协程 A co_await一个 Task或其他等待体 B,B通过await_suspend将其句柄记录,在最后的final_suspend中将句柄加入调度。(callee将记录caller的协程句柄,等到callee执行完成,就将caller的句柄加入调度)。从而可以有协程调用链。

用到的cpp新特性、语法

  • c++20 coroutine
  • 数据结构:
    • tuple
    • variant
  • 模板写法:
    • concepts
    • requires
    • 参数包/可变参数
    • 模板参数推导指引

性能测试

libevent、libuv、asio、asyncio

和以上三个库进行benchmark对比,测试场景为echo server

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值