[开源分享]Rain:从零开始构建异步库,部分场景性能超越tokio

2026-04-13 12:261阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签:
  • 我的开源项目完整开源,无未开源部分:
  • 我的开源项目已链接认可 LINUX DO 社区:
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:
  • 以上选择我承诺是永久有效的,接受社区和佬友监督:

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


github项目连接:

github.com

GitHub - wzxzhuxi/Rain: 从零开始构建C++23 异步运行时框架。每核事件循环、协程任务、epoll...

从零开始构建C++23 异步运行时框架。每核事件循环、协程任务、epoll 反应器、层次时间轮、线程池与同步-异步桥接。

项目主页:(已添加L站友好链接)
image961×520 27.3 KB

接下来是正文部分

在24年学习tokio的时候,看到tokio宣称自己在通用领域做到了极致,各项测试也非常nice,那时候只关注了如何使用,而没有探究原理

到今年2月辞职,我想回到互联网行业(之前从事嵌入式,使用c/c++),就想着一边学习tokio的架构,如果可以,最好使用c++仿制一个异步运行时库

一开始是打算完全仿制的,从架构到细节,直到后面在b站看到了"zedio"的介绍视频,发现已经有人仿制过tokio了,而且获得了持平tokio的性能

好吧…看来老王想做的已经有人做过了…

我转而尝试另一个方向:能不能通过做减法,降低通用性来做到部分场景超越tokio呢?

有哪些c/c++的项目以性能见长呢?

我想到了大名鼎鼎的nginx,借鉴设计思路,我决定使用thread-per-core架构(不过准确来说nginx是Process-per-Core架构)

经过两个月的学习,最终完成了Rain,至于为什么叫Rain,原因很简单,4月7日徐州下了好大的雨,所以就叫Rain了

这是使用wrk进行测试的性能表现

指标 Rain Tokio
Requests/sec 247,283 219,543
Avg Latency 788 us 819 us
Max Latency 9.31 ms 18.45 ms
Stdev 282 us 477 us
Timeouts 0 0

到底为什么比 Tokio 还要快?

难道老王是天才吗?很遗憾,并不是。

Rain 之所以能在这组测试里超过 Tokio,主要原因是它没有采用任务窃取(per-core可以优化cpu cache miss和任务转移损耗)。因此,可以减少任务在不同 CPU 核之间传递带来的额外开销。

这是否意味着 Rain 没有应用层自动负载均衡策略?是的。Rain 没有设计应用层自动负载均衡,而是把负载均衡更多交给内核层处理。

对于网络任务,使用 SO_REUSEPORT 后,内核可以自动把连接分配到不同的 CPU 核上,从而达到负载均衡的效果,也因此减少了自动跨核传递任务的成本。

这是否意味着 Rain 完全没有跨核任务传递能力?也不是。我们仍然可以通过 EventLoop::submit() 显式地把任务投递到指定核心,在需要时完成跨核传递。

正文最后是使用jekyll制作的文档站

文档站链接:

wzxzhuxi.github.io

Rain | Rain

面向可理解性的 C++23 异步运行时

网友解答:
--【壹】--:

谢谢你,我后面也会在b站发教学视频,到时候会再发帖


--【贰】--:

佬友牛皮,star支持下,学习学习。。