XRT 2 队列吞吐样本
面向生产者与消费者之间的数据交接,队列同时提供逐项和批量接口。批量预留将校验与原子协调开销分摊到一组元素,适合能够自然聚合工作的高吞吐场景。
单生产者与单消费者之间的轻量数据传递。
4 个生产者汇聚工作,由单消费者接收。
4 个生产者、4 个消费者协同处理队列数据。
以上为 2026-07-28 归档基准的三次运行中位数(四舍五入),单位为队列元素 / 秒。具体环境与负载如下。
硬件与系统
AMD Ryzen 5 5600
6 核 / 12 逻辑处理器
Windows 10 Pro 10.0.19045 x64
编译与执行
GCC 16.1.0 · C11-O2 -Wall -Wextra -Werror
串行采样,不绑定处理器
负载与统计
每个生产者 500,000 个元素
容量 4,096 · 批量大小 32
3 次独立样本,取中位数
完整样本
表格可横向滚动。保留逐次采样值,便于在相同条件下进行比较。
| 队列路径 | 样本 1 | 样本 2 | 样本 3 | 中位数 |
|---|---|---|---|---|
| SPSC | 28,156,799.586 | 28,811,967.339 | 30,437,879.332 | 28,811,967.339 |
| MPSC | 8,135,048.310 | 9,488,260.176 | 8,070,233.629 | 8,135,048.310 |
| MPSC batch 32 | 98,299,903.175 | 98,070,463.628 | 117,955,825.543 | 98,299,903.175 |
| MPMC | 6,591,453.785 | 6,627,232.425 | 6,689,527.010 | 6,627,232.425 |
| MPMC batch 32 | 125,923,967.109 | 136,885,043.940 | 134,432,091.629 | 134,432,091.629 |
归档来源:XRT 2 Queue Throughput Baseline · 记录提交 aff1ac5a549a。
性能背后的工程选择
平台原生网络后端
IOCP、epoll、kqueue、io_uring 与 select 汇聚到统一的端口抽象,应用沿用一致接口,后端发挥平台能力。
网络引擎 API →批量处理与内存复用
队列批量接口、对象池、临时 arena 与引用式缓冲区提供多种数据组织方式,减少重复分配和协调成本。
队列 API →密码硬件加速
AES 实现包含 x86 AES-NI / PCLMUL 与 ARM AES / PMULL 加速路径,并在运行时检测处理器能力。
密码原语 API →把高效基础带入网络应用
通过 xhttp 组合 HTTP 连接池、流式收发与服务端运行时;通过 xws 组合 WebSocket 连接管理、广播与引用式发送。由内核提供基础数据路径,由扩展库组织领域能力。
在你的环境中复现
克隆仓库并切换到基准记录提交,在 Windows PowerShell 中运行仓库自带脚本。准备好可从 PATH 调用的 GCC 后,连续执行三次并保留输出。
git clone https://gitee.com/xywhsoft/xrt.git xrt-queue-bench
cd xrt-queue-bench
git checkout aff1ac5a549aaa0e2759e9af376f68a85e71261e
for ($sample = 1; $sample -le 3; ++$sample) {
powershell.exe -NoProfile -ExecutionPolicy Bypass -File dev/bench/run_queue_bench_windows.ps1
}