Skip to content

本地性能报告

查看 Markdown

本页汇总各协议的最终测量:UDP 测量于 2026-10-12,其他协议和原生 TCP 协程测量于 2026-10-10。各协议保留自己的源码哈希与原始记录。

本机完成 1,620 次 IPv4 测量,比较不同 Asio 依赖方案下的吞吐量、p99 延迟和 IO 模型。

测试条件

配置 实测机器
机器型号 Mac16,11
处理器 Apple M4 Pro
架构 arm64
物理 / 逻辑核心 14 / 14
内存 48 GiB
操作系统 macOS 27.0.1 (26A434)
内核版本 27.0.0

Release 构建;测量 1.0 s,预热 0.25 s,重复 3 次。

主图:1024 字节、16 个客户端、无额外业务计算;每连接在途消息上限为 UDP 1 条、其他协议 16 条。客户端与服务端在同一进程内共享 IO 线程,使用本机回环网络。

平均进程 CPU 占用率以单核为 100%,多线程可超过 100%;估算值单独标注,三次 CPU 采样不完整时为 N/A。 本机有 14 个逻辑核心,整机占比 = 进程 CPU% / 14,单核 100% 对应整机 7.14%。

核心结果

  • TCP / Standalone Asio / 无额外业务计算:本组吞吐量最高的模型为 4 个 io_context / 4 个线程,相对单线程为 1.98×;对应 p99 为 1,346.00 us,单线程为 1,491.79 us。
  • UDP / Standalone Asio / 无额外业务计算:本组吞吐量中位数最高的模型为 1 个 io_context / 1 个线程,92,515 次往返/s,p99 RTT 为 207.79 us,进程 CPU 占用率为 99.4%。
  • 协程 TCP / Standalone Asio / 无额外业务计算:本组吞吐量最高的模型为 1 个 io_context / 4 个线程,相对单线程为 1.84×;对应 p99 为 870.46 us,单线程为 1,028.71 us。
  • 协程 TCP / Standalone Asio / 每次回显执行 10,000 次 CPU 计算:本组吞吐量最高的模型为 4 个 io_context / 4 个线程,相对单线程为 3.54×;对应 p99 为 1,749.29 us,单线程为 5,687.25 us。

最高中位数仅适用于对应负载;完整数据见下表。

吞吐量

Local throughput overview

p99 往返延迟

99% 的采样往返在该时间内完成;1000 微秒 = 1 毫秒。

Local p99 latency overview

如何选择 IO 模型

模型 对应业务 需要注意
1 个 io_context / 1 个线程 低并发、控制服务、较轻的状态处理 耗时回调会影响所有连接
1 个 io_context / 多线程 连接活跃程度不均衡、希望共享空闲线程 使用每连接 strand;共享调度有开销
多个 io_context / 各 1 个线程 分区会话、租户或负载分配稳定的服务 繁忙分片无法借用其他分片线程

协程的 IO 与 CPU 负载比较.

各协议的详细结果

详细页包含 64/1024/16384 字节、1/16 个客户端的全部数据。柱子为重复运行的中位数;误差线为最小/最大值,不是置信区间。

全部数值(JSON) | 包体、批量与执行方式对比

协程 window=16 测量整批 RTT,回调测试程序测量逐消息 RTT;不能据此判断协程加速比。

工具链与构建

Apple Clang 21.0.0; CMake 4.3.3; Ninja; Release -O3 -DNDEBUG -std=gnu++20 -arch arm64; TLS ON; sanitizers OFF. Standalone Asio 1.38.2 with BHO Beast based on Boost 1.84 (API 351); Boost 1.90.0 with Asio 1.38.0 and Beast API 359; OpenSSL 3.6.4. Mac mini on AC power, low power mode disabled, no CPU affinity.

两种依赖方案使用的 Beast 版本不同,方案之间的性能差异同时包含依赖版本的影响,不能全部归因于 Asio。

指标定义

吞吐量、RTT、CPU、RSS 和错误定义.

原始数据与复现

适用范围

本机回环结果不代表跨主机或生产容量。短时测量、调度和温度可能带来波动;部署前需使用实际负载测量。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close