积累沉淀

待山花烂漫,化茧成蝶

易道云 C++ 培训学习总结

写个自己的话: 在人工智能的时代, 不知道自己还能否从事程序员这个职业(AI Vibe coding).有过焦虑, 有过迷惘, 在时代的浪潮下个人的命运总是随波逐流. 每天都被Ai的新闻所震撼, 其实内心非常希望自己也能逐浪前行,做一个不被时代抛弃的人.

自己条件非常不足,没有好的学历背景,还是超35+的大龄,工作gap了很多年.想冲击理想,也没能成功, 想成为DeepSeek 创始人那样的改变时代,改变人生活方式,甚至影响国家命运的人. 奈何才疏学浅,只能先走脚下的路.理想还未幻灭,不知能否重新爬起. ps…好多废话呀,就这样👌

项目总览

阶段 项目 状态 核心内容 GitHub Gitee
基础 cppbase ✅ 完成 C++20 标准库组件手写(string / unique_ptr) github gitee
基础 cppbase — IO 多路复用 ✅ 完成 select / poll / epoll 回声服务器 + 性能对比
系统与框架 reactor_module ✅ 完成 Reactor 模式 · 主从多线程 · epoll ET · 线程池 · 定时器
系统与框架 TetrisGame ✅ 完成 Qt 6.8 / QML 俄罗斯方块 · C++/QML 混合编程 github gitee
企业实战 coronet ✅ 完成 C++20 协程 · 跨平台异步 I/O 库 · 三后端 · TLS · C1000K github gitee
企业实战 RemoteCtrl ✅ 完成 远程控制软件 · 文件管理 · 桌面监控 · 终端控制 github gitee
企业实战 音视频系统开发 🔲 待完成 音视频编解码、流媒体传输
企业实战 易栈(百万并发聊天服务器) 🔲 待完成 百万级并发 IM 系统
企业实战 易播加密播放器 🔲 待完成 加密播放器 · DRM · 音视频同步

一、基础部分 — cppbase

项目简介

cppbase 是 C++20 基础组件从零实现与性能基准测试项目。核心理念是不依赖标准库,从零造轮子,深入理解底层机制。每个模块配套 Google Test 功能测试 + Google Benchmark 性能基准,形成与标准库的量化对比。

技术栈:C++20 · CMake · Google Test · Google Benchmark · Python Matplotlib

模块一:hstring — 自定义字符串

完整实现 my::string,核心设计包括:

  • SSO(小字符串优化):15 字符以内栈上存储,避免堆分配
  • copy-and-swap:强异常安全保证
  • KMP 子串查找:O(n+m) 时间复杂度
  • 全套 API:构造/拷贝/移动、append/insert/erase、split、compare、迭代器

性能:大部分操作达到 std::string5~15 倍,尤其是构造(快 15x)、拷贝(快 14x)、移动赋值(快 9x)。find/compare 略逊于标准库,差距在 20-30%,这是因为编译器对标准库有深度优化。

模块二:my::unique_ptr — 自定义智能指针

仿 std::unique_ptr 的完整实现,核心设计:

  • compressed_pair + EBO:空删除器零额外开销
  • 数组偏特化unique_ptr<T[]> 提供 operator[]
  • SFINAE + C++20 Concepts:编译期约束模板参数
  • 33 项 GTest 测试全部通过:单对象 19 项 + 数组 14 项

性能make_unique 快 39%、reset 快 12%、release 快 9%,整体接近甚至超越标准库。

模块三:IO 多路复用对比

实现了 select / poll / epoll 三套回声服务器,统一非阻塞 I/O 设计确保公平对比。配合 redis-benchmark 进行 10~5000 并发的系统压测:

  • epoll 纯性能最优,1000 并发达到 84,818 RPS
  • select 在低并发 (<2000) 表现意外亮眼,但高并发直接超时
  • reactor-epoll 高并发最稳定,5000 并发仍有 70,373 RPS

二、系统与框架

reactor_module — Reactor 高并发网络框架

基于 Reactor 设计模式,在 Linux 环境实现了高并发、可扩展的网络服务器框架。这是 cppbase 中 epoll 实现的架构升级版本——从单文件过程式代码演进为 8 个类的面向对象架构。

核心架构:Main-Reactor(accept)+ 2× Slave-Reactor(I/O 处理)+ ThreadPool(4)(业务计算)

关键技术

  • epoll 边缘触发(ET) + 非阻塞 I/O:减少事件通知次数
  • eventfd 跨线程唤醒:主 Reactor 向从 Reactor 安全投递任务
  • timerfd + 最小堆优先队列:内核定时器与 epoll 完美融合
  • 工厂模式注入 Handler:业务与框架解耦,支持 Echo / Redis PING 协议切换
  • 线程安全:每个 Reactor 独立状态,零锁竞争;跨线程通过 eventfd + 任务队列通信

压测结论:reactor-epoll 在高并发(2000~5000)场景是唯一稳定通过的模型,体现了架构设计对可扩展性的价值。

TetrisGame — Qt 6.8 / QML 俄罗斯方块

经典俄罗斯方块,采用 C++ + QML 混合架构:C++ 负责全部游戏逻辑状态,QML 负责纯渲染。

核心技术

  • C++ ↔ QML 桥接qmlRegisterSingletonInstance 注册 C++ 单例到 QML
  • 400 个原生 QML Rectangle 替代 Canvas 渲染,利用 GPU 合成
  • 程序化 PCM 音频合成(方波+正弦),无外部音频文件,QAudioSink 播放
  • Qt 6.8 qmlcachegen 踩坑:Canvas onPaint 不触发→换 Rectangle;嵌套 QVariantList 访问失败→换逐格 int 访问器;绑定不追踪 Q_INVOKABLE 依赖→引入 stateRevision 计数器强制重算
  • 最终架构原则:全部逻辑下沉 C++,QML 零游戏逻辑、零条件判断

收获:深入理解了 Qt 框架的限制与边界,学会了在编译器和框架的约束下做出务实的设计决策,而非死磕"正确"方案。


三、企业实战

coronet — C++20 协程 · 跨平台高性能异步 I/O 库 ⭐

coronet 是本培训的核心成果项目,一个生产级 C++20 协程异步 I/O 库,自主实现协程运行时,支持 Linux epoll / io_uring / Windows IOCP 三后端,并提供 TLS 加密传输。

核心特性

特性 说明
三后端热插拔 epoll ⇄ io_uring(-DCORONET_IOURING=ON)⇄ IOCP(Windows 自动),编译期切换
全编译器跨平台 Linux GCC 13 / Clang 18 + Windows MSVC 19.41,一套代码
TLS 加密 OpenSSL 3.x,双向验证 + ALPN,内存 BIO 桥接同步 SSL 到异步事件循环
编译期零开销多态 CRTP + #ifdef 平台选择,无虚表、无堆分配 Proactor
链式 co_await co_await (send && recv) 单次挂起完成两个 I/O 操作
协程同步原语 mutex / condition_variable / semaphore / channel / when_all·any·some

性能数据

  • C1000K 压测通过:1,000,000 请求 × 1,000 并发,单线程 50,955 RPS,6 线程 50,140 RPS
  • vs ASIO 对比:6 线程 比 ASIO 快 67%,CPU 低 61%
  • 三平台峰值:Windows MSVC IOCP 58,384 RPS(单线程最高)
  • 27/27 测试全平台通过(GCC/Clang/MSVC + epoll/io_uring/IOCP)

架构亮点

1
2
3
4
5
6
7
8
9
用户层: task<T> / shared_task<T> / generator<T>
↓ co_await
I/O 层: async::recv / send / accept / connect / timeout (编译期工厂分派)

后端层: epoll | io_uring | IOCP (CRTP 编译期多态)

事件循环: io_context (单线程, 栈上 Proactor)
├─ drain_cross_thread() → SPSC 无锁环
└─ do_worker_part() → 协程恢复

关键技术决策:

  • 惰性协程 task<T>:父链内联恢复,零调度开销
  • SPSC 无锁环:跨线程任务投递,避免锁竞争
  • shared_task<T>:引用计数多等待者,支持协程组合器
  • io_context:栈上 Proactor,无堆分配

coronet 证明了从零实现高性能协程运行时完全可行,且在核心指标上可比肩甚至超越业界标杆 ASIO。

RemoteCtrl — 远程控制软件

基于 coronet 协程库的实用远程控制软件,包含客户端和服务端。

功能

  • 文件管理:远程浏览目录树、文件下载(断点续传)、删除、远程打开
  • 桌面监控:实时屏幕共享 ~20 FPS,GDI BitBlt + WIC JPEG 硬件编码,鼠标事件转发
  • 终端控制:远程锁屏/解锁
  • 守护进程:开机自启、后台静默运行

架构

  • 服务端:coronet 单线程协程,acceptLoop + SessionHandler + screenStream
  • 客户端:Qt5 Widgets + coronet 独立 I/O 线程,mutex 队列桥接
  • 协议:自定义二进制协议,magic + 命令 + 载荷 + CRC32C(SSE4.2 硬件加速)
  • 编码:全链路 UTF-8,中文文件名零乱码

技术价值:将 coronet 应用到真实产品场景,验证了异步协程在 GUI 应用中的可行性——Qt 主线程不阻塞,I/O 在协程线程异步处理。


四、达成的核心成就

技术能力

  1. C++20 深度掌握:Concepts、协程、constexpr、移动语义、模板偏特化、SFINAE
  2. 从零造轮子能力:string、unique_ptr、协程运行时、Reactor 框架、异步 I/O 库——均自主实现并达到或超越标准库/业界标杆性能
  3. 系统编程:epoll / io_uring / IOCP 三后端、TCP 协议栈、eventfd / timerfd、非阻塞 I/O、多线程安全设计
  4. 跨平台开发:一套代码同时支持 Linux GCC / Clang + Windows MSVC
  5. GUI 开发:Qt 6.8 / QML / C++ 混合编程、Canvas vs 原生控件权衡
  6. 设计模式实践:Reactor、策略、工厂、观察者、EBO、CRTP、copy-and-swap
  7. 性能工程:Google Benchmark 量化对比、redis-benchmark 压测、Matplotlib 可视化、C1000K 验收

量化成果

维度 数据
自研 string 性能 标准库的 5~15 倍
自研 unique_ptr 性能 标准库的 109~139%
reactor-epoll 高并发 5000 并发 70,373 RPS
coronet C1000K 百万请求千并发通过,6 线程比 ASIO 快 67%
coronet 跨平台测试 27/27 全通过(3 编译器 × 3 后端)
Google Test 用例 unique_ptr 33/33 全通过

综合素养

  • 工程化思维:CMake 构建系统、单元测试、性能基准、压测自动化、文档报告——每个项目都是完整工程
  • 架构设计:从单文件过程式 → 面向对象 Reactor → 协程异步 Proactor,经历了完整的架构演进
  • 问题解决:Qt qmlcachegen 编译器缺陷的务实绕过、跨线程安全的状态隔离、SPSC 无锁环的设计与实现
  • AI Vibe Coding 实践:coronet 项目由 Claude Code / DeepSeek 辅助生成,人工负责需求定义、架构审核、代码审查

五、后续进阶方向(待完成)

以下为培训计划中尚未完成的企业实战项目:

  • 音视频系统开发:音视频编解码(H.264/H.265/AAC)、流媒体协议(RTMP/RTSP/WebRTC)、渲染管线
  • 易栈 — 百万并发聊天服务器:百万级长连接管理、消息路由与推送、分布式架构、高可用设计
  • 易播 — 加密播放器:DRM 数字版权保护、加密传输与解密播放、音视频同步、硬件解码加速

这三个方向将分别覆盖音视频、大规模分布式系统和安全加密三大核心领域,构建完整的高性能 C++ 技术栈。

Buy me a coffee please.