Skip to content

原生 Asio 执行方式对照

查看 Markdown

16 组配置分别使用回调与协程,各启动三个独立进程测量,共 96 轮;错误、未完成请求和预热失败均为零。业务计算量和线程数单独设置。

直接比较原生 Asio 回调与协程,绕过 arknet 端点及原生操作计数;不代表 arknet 公开协程端点。CPU 为同进程客户端与服务端合计;在途数为 16 时 RT 为批次时间,为 1 时是消息时间。

环境项 记录值
机器 Mac mini (Mac16,11) · arm64
CPU Apple M4 Pro · 14 物理核 / 14 逻辑核 (系统 CPU 数 14)
内存 48 GiB
操作系统 macOS 27.0.1 · 构建 26A434
编译器 Apple clang version 21.0.0 (clang-2100.3.34.2) · gnu++20
编译配置 Release · -O3 -DNDEBUG
依赖 Boost 1.90 · Standalone Asio 1.38.2 · OpenSSL 3.6.4 25 Aug 2026 (Library: OpenSSL 3.6.4 25 Aug 2026)
构建工具 CMake 4.3.3 · Ninja 1.13.2
服务端 同进程原生 Asio TCP 回显服务
测量区间(UTC) 2026-10-15T19:07:59Z → 2026-10-15T19:18:36Z
预热 / 测量 0.25 s / 1 s × 3 独立进程
API / IO 原生 Asio 回调 / 协程 · 1 个 io_context,1 / 4 个工作线程
CPU 统计范围 同进程客户端 + 服务端,含预热;单核满载为 100%

测量版本: 2aa5bc0ef7d383d8cfbc04520f3b952fa27c5fbd

比较原生 Asio 回调与协程;使用同一库版本。驱动 coroutine.cpp SHA256: 604746e85e399148f6ccb832ae37b4718c40173988a26fd4d0b671ffc9b7932d

原生 Boost.Asio · 计算迭代 0

候选版本 · 16 条连接 · 1024 B · 在途 1 / 16 · 1 个 io_context,1 / 4 个线程

原生 Boost.Asio · 计算迭代 0 · 吞吐量 · 往返/秒

原生 Boost.Asio · 计算迭代 0 · CPU 占用 · %

P50 与 P99 响应时间

原生 Boost.Asio · 计算迭代 0 · P50 响应时间 · µs

原生 Boost.Asio · 计算迭代 0 · P99 响应时间 · µs

图示 4 组的吞吐量比值变化中位数:-0.8%。计算均为每组比值的中位数,不是合并总吞吐量。

原生 Boost.Asio · 计算迭代 10000

候选版本 · 16 条连接 · 1024 B · 在途 1 / 16 · 1 个 io_context,1 / 4 个线程

吞吐量、CPU 与响应时间

原生 Boost.Asio · 计算迭代 10000 · 吞吐量 · 往返/秒

原生 Boost.Asio · 计算迭代 10000 · P50 响应时间 · µs

原生 Boost.Asio · 计算迭代 10000 · P99 响应时间 · µs

原生 Boost.Asio · 计算迭代 10000 · CPU 占用 · %

图示 4 组的吞吐量比值变化中位数:-0.41%。计算均为每组比值的中位数,不是合并总吞吐量。

原生 Standalone Asio · 计算迭代 0

候选版本 · 16 条连接 · 1024 B · 在途 1 / 16 · 1 个 io_context,1 / 4 个线程

吞吐量、CPU 与响应时间

原生 Standalone Asio · 计算迭代 0 · 吞吐量 · 往返/秒

原生 Standalone Asio · 计算迭代 0 · P50 响应时间 · µs

原生 Standalone Asio · 计算迭代 0 · P99 响应时间 · µs

原生 Standalone Asio · 计算迭代 0 · CPU 占用 · %

图示 4 组的吞吐量比值变化中位数:-0.95%。计算均为每组比值的中位数,不是合并总吞吐量。

原生 Standalone Asio · 计算迭代 10000

候选版本 · 16 条连接 · 1024 B · 在途 1 / 16 · 1 个 io_context,1 / 4 个线程

吞吐量、CPU 与响应时间

原生 Standalone Asio · 计算迭代 10000 · 吞吐量 · 往返/秒

原生 Standalone Asio · 计算迭代 10000 · P50 响应时间 · µs

原生 Standalone Asio · 计算迭代 10000 · P99 响应时间 · µs

原生 Standalone Asio · 计算迭代 10000 · CPU 占用 · %

图示 4 组的吞吐量比值变化中位数:-0.81%。计算均为每组比值的中位数,不是合并总吞吐量。

全量数据(中位数 [最小值—最大值])
参数 吞吐/秒: 回调 → 协程 P50 µs: 回调 → 协程 P99 µs: 回调 → 协程 CPU%: 回调 → 协程 RSS MiB: 回调 → 协程
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 1 · 线程 1 · 计算迭代 0 · 消息 RT 170,547.48 [170,383.32–170,675.76] → 164,322.56 [162,691.62–164,564.88] 92 [91.83–92.08] → 95.58 [95.46–95.75] 112.75 [112.46–113.5] → 117.21 [116.75–155.33] 99.89 [99.88–99.89] → 99.89 [99.87–99.89] 7.14 [7.13–7.14] → 7.19 [7.17–7.2]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 1 · 线程 1 · 计算迭代 10000 · 消息 RT 41,876.95 [41,868.07–41,911.37] → 41,387.69 [41,334.03–41,412.75] 379.25 [379.21–379.46] → 384.04 [383.83–384.21] 404.75 [404.33–404.79] → 409.29 [409.08–409.92] 99.9 [99.9–99.91] → 99.9 [99.89–99.9] 4.5 [4.48–4.52] → 4.56 [4.53–4.83]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 1 · 线程 4 · 计算迭代 0 · 消息 RT 198,801.13 [177,260.11–200,152.53] → 198,536.01 [197,939.57–198,610.09] 82.21 [81.71–85.92] → 82.38 [82.38–82.63] 100.79 [100.5–152.75] → 101.67 [101.17–102.75] 259.56 [259.47–260.25] → 263.34 [263.15–263.96] 7.19 [7.17–7.2] → 7.23 [7.16–7.25]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 1 · 线程 4 · 计算迭代 10000 · 消息 RT 112,567.03 [112,132.14–113,800.57] → 111,808.78 [111,682.26–112,365.19] 138.75 [137.63–139.33] → 139.58 [139.54–140] 170.83 [167.96–176.21] → 175.08 [173.79–196.17] 346.44 [345.57–347.6] → 347.81 [347.75–348.98] 6.69 [6.66–7.44] → 6.73 [6.66–6.75]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 16 · 线程 1 · 计算迭代 0 · 批次 RT 850,009.83 [844,188.64–851,440.67] → 840,559.35 [836,239.55–846,478.43] 287.88 [287.04–289.83] → 289.83 [288.83–292.58] 320.33 [318.79–345.67] → 323.13 [322.38–324.58] 99.9 [99.89–99.97] → 99.99 [99.98–100] 5.92 [5.89–5.94] → 5.59 [5.59–5.59]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 16 · 线程 1 · 计算迭代 10000 · 批次 RT 60,143.79 [59,174.4–60,221.74] → 60,120.01 [59,485.46–60,444.37] 4,251.58 [4,235.17–4,300.96] → 4,249.46 [4,226.33–4,267.38] 4,424 [4,367.04–4,446.67] → 4,422.67 [4,404.42–4,469.29] 99.9 [99.9–99.97] → 99.99 [99.9–100] 3.73 [3.7–3.73] → 3.75 [3.75–3.77]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 16 · 线程 4 · 计算迭代 0 · 批次 RT 1,837,089.63 [1,836,463.54–1,847,757.35] → 1,828,085.76 [1,812,937.3–1,828,113.94] 127.71 [126.88–127.96] → 128.96 [128.46–128.96] 153.79 [149.96–160] → 157.75 [149.13–182.79] 306.69 [306.1–307.28] → 308.73 [307.98–309.98] 7.67 [7.66–7.7] → 8.42 [7.64–8.53]
TCP · Boost.Asio · 16 连接 · 1024 B · 在途 16 · 线程 4 · 计算迭代 10000 · 批次 RT 225,555.56 [224,993.91–225,783.84] → 225,218.06 [224,852.22–225,683.25] 1,098.38 [1,097.83–1,106.33] → 1,095.88 [1,091.54–1,101.96] 1,653.5 [1,612.42–1,751.38] → 1,696.88 [1,602.42–1,715.54] 398.18 [398.04–398.24] → 398.15 [397.94–398.61] 4.19 [4.17–4.28] → 4.33 [4.33–4.36]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 1 · 线程 1 · 计算迭代 0 · 消息 RT 172,669.4 [171,476.54–173,410.93] → 164,939.97 [164,295.79–164,945.6] 90.79 [90.46–91.54] → 95.33 [95.25–95.67] 111.54 [110.71–112.38] → 116.96 [116.58–117.13] 99.89 [99.89–99.89] → 99.89 [99.89–99.9] 7.05 [7.05–7.08] → 7.13 [7.13–7.13]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 1 · 线程 1 · 计算迭代 10000 · 消息 RT 41,885.75 [41,819.82–41,968.28] → 41,402.67 [41,360.39–41,475.46] 379.75 [378.92–380.04] → 383.92 [383.75–384.13] 404.63 [404.33–405.83] → 409.46 [409.25–409.46] 99.91 [99.91–100] → 99.9 [99.9–99.9] 4.69 [4.44–4.72] → 4.48 [4.48–4.72]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 1 · 线程 4 · 计算迭代 0 · 消息 RT 196,692.51 [195,681.92–197,001.57] → 196,540.99 [196,493.35–196,563.64] 82.63 [82.5–83.08] → 82.71 [82.71–82.88] 108.79 [105.5–111.04] → 108.42 [107.83–108.63] 258.98 [258.14–259.33] → 262.71 [262.7–264.04] 7.14 [7.11–7.16] → 7.19 [7.17–7.22]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 1 · 线程 4 · 计算迭代 10000 · 消息 RT 114,138.01 [113,133.28–114,346.94] → 112,641.2 [111,661.2–112,728.88] 137.21 [137.13–138.04] → 139.38 [139.04–140] 167.67 [166.88–168.08] → 170.42 [166.67–175.96] 347.34 [346.24–347.7] → 347.97 [347.46–348.77] 6.66 [6.66–6.67] → 6.73 [6.72–6.73]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 16 · 线程 1 · 计算迭代 0 · 批次 RT 857,482.89 [855,409.84–861,275.6] → 846,130.26 [844,806.71–846,534.65] 285.38 [285.04–285.83] → 288.83 [288.54–289.21] 316 [315.79–316.04] → 320.42 [319.75–321.21] 99.9 [99.9–99.91] → 99.9 [99.89–99.99] 5.56 [5.55–5.83] → 5.94 [5.53–5.97]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 16 · 线程 1 · 计算迭代 10000 · 批次 RT 61,520.59 [60,724.5–61,654.93] → 61,238.35 [61,216.06–61,796.62] 4,155.08 [4,114.17–4,210.54] → 4,148.04 [4,119.42–4,156.83] 4,324.13 [4,280.25–4,341] → 4,316.29 [4,300.83–4,429.63] 99.9 [99.9–99.91] → 100 [99.95–100] 3.63 [3.63–3.64] → 3.69 [3.69–3.69]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 16 · 线程 4 · 计算迭代 0 · 批次 RT 1,839,877.8 [1,833,345.01–1,842,623.09] → 1,829,139.3 [1,823,523.18–1,842,521.87] 127.46 [126.58–127.83] → 128.42 [127.63–128.83] 161.92 [155.63–182.71] → 153.63 [151.38–179.83] 305.02 [304.52–305.28] → 307.19 [306.92–307.99] 8.31 [7.56–8.38] → 7.73 [7.64–8.41]
TCP · Standalone Asio · 16 连接 · 1024 B · 在途 16 · 线程 4 · 计算迭代 10000 · 批次 RT 225,511.71 [224,931.75–225,873.02] → 225,459.44 [225,445.26–225,794.32] 1,102.88 [1,091.75–1,102.92] → 1,106.13 [1,086.67–1,107.46] 1,665.17 [1,630.17–1,824.08] → 1,591.75 [1,585.29–1,728.92] 398.28 [398.12–398.28] → 398.27 [398.22–398.29] 4.14 [4.11–4.27] → 4.33 [4.19–4.33]

复现

使用同一基准程序对比不同库版本。

编译配置与参数。使用仓库中的独立 C++ 基准程序,输出数据保存在源码目录外。

cmake -S . -B build/benchmark -DCMAKE_BUILD_TYPE=Release \
  -DARKNET_BUILD_TESTS=OFF -DARKNET_BUILD_EXAMPLES=OFF \
  -DARKNET_BUILD_BENCHMARKS=ON -DARKNET_USE_BOOST_ASIO=ON \
  -DARKNET_ENABLE_SSL=ON
cmake --build build/benchmark --target arknet_coroutine_benchmark
./build/benchmark/benchmarks/arknet_coroutine_benchmark --protocol tcp --execution coroutine \
  --payload 1024 --clients 16 --window 16 --io-model shared \
  --io-threads 4 --work 10000 --warmup 0.25 --seconds 1
Navigation

Type to search…

↑↓ navigate↵ selectEsc close