Hical 性能优化全记录

优化背景 Hical 是我写的 C++20/26 Web 框架,跑 Hello World 压测时起初只有 27K QPS,而同类框架(Cinatra 165K、Drogon 170K)差了将近一个数量级。目标很明确:追平 Cinatra/Drogon 的水平。 整个优化过程分 6 个阶段,不是拍脑袋乱改,每一步都是 perf + 火焰图定位瓶颈 → 想方案 → 写代码 → 跑压测验证 的循环。能看到数字变化才算数。 阶段 1:协程帧削减(v2.5.1-v2.5.2) 发现问题 perf 火焰图第一个大头:14.5% CPU 在 scheduler::wake_one_thread_and_unlock + pthread_cond_signal。 一开始以为是跨线程调度问题,仔细一看不是——是 Boost.Asio scheduler 每次 co_await resume 都要走的内部调度流程太重了。一个 Hello World 请求居然走了 4 个协程帧: 1 2 3 4 5 handleSession: co_await async_read → 帧 1(必需,I/O 等待) co_await router_.dispatch() → 帧 2(Router 本身是协程) co_await handler(req) → 帧 3(同步 handler 被包装成协程,不必要!) co_await async_write → 帧 4(必需,I/O 等待) 帧 1 和 4 是真正的 I/O 等待不可消除,但帧 2 和 3 完全是浪费——一个同步的 return HttpResponse("Hello") 被裹了两层协程。 ...

May 22, 2026 · 9 min · 1794 words

C++ Web 框架性能实测:Hical vs Drogon vs Crow vs Oat++ vs cpp-httplib vs Cinatra(2026)

C++ Web 框架性能实测:Hical vs Drogon vs Crow vs Oat++ vs cpp-httplib vs Cinatra(2026) 上一篇横评我们从架构设计、功能完整度和开发体验角度对比了四个 C++ Web 框架。结论是"各有适合的场景"——但没回答一个关键问题:到底差多少。本文用硬数据补上这个缺口:相同硬件、相同容器、相同压测工具,12 个场景全量对比,包括别人不太敢贴的对自己不利的数据。 目录 1. 引言 2. 测试环境与方法论 3. 基础吞吐量对比 4. 中间件链开销对比 5. 高并发扩展性 6. 资源效率 7. 延迟分析 8. 综合分析与选型建议 9. 结论 10. 复现指南 1. 引言 C++ Web 框架的选型讨论中,最常听到三句话: “Drogon 在 TechEmpower 上排名很高” “Crow 极简,几行代码就能跑” “Oat++ 零依赖,开箱即用” “cpp-httplib 零依赖单头文件,几行就能搭 HTTP 服务” “Cinatra 是国产 C++20 协程框架,性能号称顶尖” 这些都是事实,但缺少在统一条件下的定量对比。框架官网的 benchmark 通常只跑 Hello World,且各自用不同的硬件、不同的压测工具、不同的并发参数——数据之间几乎没有可比性。 本文的定位: 补充 07 号文章 的定性对比,用数据量化各框架的性能差异 与 11 号文章 的跨语言对比形成互补——那篇回答"C++ 和 Go/Rust 差多少",本篇回答"C++ 框架之间差多少" 所有数据可复现——Docker 一键启动,run_bench.sh 跑一遍就能拿到结果 2. 测试环境与方法论 2.1 硬件 & 容器环境 项目 规格 宿主机 Windows 10 Enterprise LTSC 2021,Intel Core i7-11700K @ 3.60GHz(8 核 16 线程),32GB 内存 虚拟机 Oracle VirtualBox 7.1,Ubuntu 24.04.3 LTS Server,8 CPU / 16GB 内存 / 102GB SSD Docker Docker Engine 29.4.3(VM 内原生运行,非 Docker Desktop) 容器资源 每容器限制 4 CPU + 512MB 内存 网络 Docker 内部 bridge 网桥,wrk 独立容器通过服务名访问各框架 网络拓扑说明:所有容器运行在 VirtualBox Linux VM 内的 Docker Engine 上,wrk 与六个框架容器处于同一 Docker bridge 网络,网络条件完全一致。 ...

May 11, 2026 · 9 min · 1868 words

2026 年 C++ Web 框架横评:Hical vs Drogon vs Cinatra vs Crow vs Oat++

2026 年 C++ Web 框架横评:Hical vs Drogon vs Cinatra vs Crow vs Oat++ 如果你在 2026 年启动一个需要 C++ Web 服务的项目,面前摆着 Drogon、Cinatra、Crow、Oat++ 和 Hical 五个选择。该怎么选?本文从架构设计、异步模型、内存管理、功能完整度、开发体验五个维度做一次横向对比,帮你快速定位最适合的框架。 一句话概括 框架 一句话定位 Drogon 久经考验的高性能全栈框架,TechEmpower 榜单常客 Cinatra header-only 的 C++20 协程 HTTP 框架,阿里 yalantinglibs 生态成员 Crow 极简轻量的微框架,Express.js 风格,上手最快 Oat++ 零依赖、内置 Swagger 的 API 框架,嵌入式友好 Hical 自研 HTTP/WS 栈 + PMR 内存池 + C++26 反射的现代全栈框架 核心对比表 Hical Drogon Cinatra Crow Oat++ C++ 标准 C++20(C++26 就绪) C++17 / C++20 C++20 C++14 / C++17 C++11+ 异步模型 协程(co_await 全链路) 回调 + 协程混合 协程(async_simple::Lazy) 回调 自研异步 API 内存管理 PMR 三层内存池 默认分配器 默认分配器 默认分配器 默认分配器 HTTP 解析 picohttpparser(自研栈) 自研(Trantor) 自研 自研 自研 SSL/TLS 编译期模板分支 运行时分支 运行时配置 运行时分支 运行时分支 路由 哈希表 O(1) + 参数线性 基数树 字符串匹配 + 正则 前缀树 Controller 映射 中间件 洋葱模型(协程链) Filter 链 AOP 切面 基础 Interceptor WebSocket 内置(自研 RFC 6455) 内置 内置 内置 内置 Cookie / Session 内置(RFC 6265) 内置 有限 有限 有限 文件上传 内置(DoS 防护) 内置 内置 需手动 内置 静态文件 内置(ETag/304) 内置 内置 需手动 有限 ORM 协程化 DB 中间件(MySQL) 内置(PG/MySQL/SQLite) 无(生态有 ormpp) 无 模块化(PG/SQLite/Mongo) OpenAPI/Swagger 内置(自动生成 + Swagger UI) 第三方 无 无 内置 日志系统 内置(6 级 + 异步双缓冲 + 通道路由) 自带(简易) 基础 无 自带(loggers) CORS 内置中间件 内置 需手动 需手动 内置 HTTP/2 不支持 支持 不支持 不支持 不支持 反射/自动序列化 C++26 双轨(原生 + 宏) 无 生态有 struct_json/struct_pack 无 宏 DTO 系统 HTTP 客户端 无 内置 内置(协程化) 无 内置 外部依赖 Boost.Asio + OpenSSL + zlib Trantor + jsoncpp + … 无(可选 OpenSSL) Asio 零依赖 License MIT MIT MIT BSD-3 Apache-2.0 深度对比 1. 异步模型 这是选框架时最该关注的维度,因为它决定了你写业务逻辑的方式。 ...

May 8, 2026 · 4 min · 820 words

C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API

C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API 提到 C++ 写 Web 服务,你脑海中浮现的可能是满屏的模板报错、手动解析 HTTP 报文、以及回调嵌套到看不清缩进的代码。但在 2026 年,C++20 协程 + PMR 内存池 + C++26 反射的组合,已经让 C++ Web 开发体验发生了质变。本文用 Hical 框架带你体验:10 行代码启动 HTTP 服务器,40 行代码搞定完整 REST API。 10 行代码,启动 HTTP 服务器 1 2 3 4 5 6 7 8 9 10 11 12 13 #include "core/HttpServer.h" using namespace hical; int main() { HttpServer server(8080); server.router().get("/", [](const HttpRequest&) -> HttpResponse { return HttpResponse::ok("Hello, hical!"); }); server.start(); } 1 2 curl http://localhost:8080/ # Hello, hical! 没有工厂类,没有 Builder 链,没有 XML 配置。创建服务器、注册路由、启动 —— 三步完事。 ...

May 4, 2026 · 4 min · 666 words

实测:C++20 协程 vs Go Gin vs Rust Actix,谁的 Web 性能更强?

实测:C++ vs Go vs Rust,谁的 Web 性能更强? “2026 年了,还有人用 C++ 写 Web 服务?” 这个问题我被问过不止一次。答案是:有,而且有相当充分的理由。本文不是要说服你用 C++,而是把三种语言放在同一个擂台上,用数据说话,帮你在实际项目里做出最合适的选择。 目录 1. 背景:三种语言在 Web 领域的 2026 年现状 2. 测试环境与方法论 3. Hello World QPS 对比 4. JSON CRUD QPS 对比 5. 内存占用对比 6. 开发效率对比 7. 生态与工具链对比 8. 各语言适用场景 9. 总结 1. 背景:三种语言在 Web 领域的 2026 年现状 C++:从游戏服务器到高性能 API C++ 在 Web 领域长期处于"少数派"地位,但 2020 年代之后情况在变化。C++20 协程(co_await)和 PMR 内存池让 C++ 的异步 Web 编程体验大幅改善;C++26 的反射提案进一步压缩了模板样板代码。游戏公司、金融公司、CDN 基础设施商是 C++ Web 服务的主要用户群——他们要么已经有大量 C++ 代码,要么对延迟的要求超出了 GC 语言的舒适区。 ...

May 2, 2026 · 11 min · 2231 words

Hical 框架应用场景全景分析

Hical 是一个现代 C++ 高性能 Web 框架,基于 Boost.Asio/Beast,具备 PMR 内存池、协程异步 I/O、WebSocket、SSL/TLS、C++26 反射层等特性。本文覆盖游戏行业 + 通用行业的全部适用场景。 一、游戏行业场景(简要) 场景 说明 GM/运营后台 REST API + 静态页面 + Session 鉴权 支付/SDK 回调网关 高并发 HTTP 接入,协程非阻塞 WebSocket 实时服务 聊天、排行榜推送、GM 监控 内部微服务 HTTP 层 MetaJson/MetaRoutes 零样板代码 二、通用行业场景 1. IoT / 嵌入式设备管理后台 ⭐ 高匹配度 为什么适合: IoT 网关和嵌入式设备普遍用 C/C++ 开发,Hical 保持语言一致性 单二进制部署,无运行时依赖,适合资源受限环境(树莓派、工控机) PMR 内存池提供可预测的内存行为,避免 GC 抖动 WebSocket 双向通信天然适合设备状态实时推送 典型用例: 设备状态监控 Dashboard(HTTP + WebSocket 推送) 固件 OTA 更新接口(Multipart 文件上传) 传感器数据采集 HTTP 接口 边缘计算节点的本地 Web 管理界面 2. 高频交易 / 量化金融辅助服务 为什么适合: ...

April 13, 2026 · 2 min · 359 words