Read this in other languages: English, 简体中文.
HotPlex 性能基准测试报告
生成日期:2026-02-23 测试版本:
latest(具体构建代码请参考 Git Tags) 测试环境:macOS (darwin), Go 1.24
执行摘要
HotPlex 能够为热复用 (hot-multiplexed) 会话提供 低于 200 毫秒的响应时间,非常适合实时 AI 智能体应用。会话池架构实现了高效的资源复用,冷启动时间控制在 2 秒以内。
1. 测试方法
1.1 基准测试配置
| 参数 | 值 |
|---|---|
| Go 版本 | 1.24 |
| 平台 | darwin/arm64 |
| 模拟 CLI | 模拟 Claude Code 协议的 Shell 脚本 |
| 测试时长 | 每个基准测试自适应 |
| 并行度 | GOMAXPROCS=default |
1.2 测量指标
| 指标 | 描述 |
|---|---|
| 冷启动延迟 (Cold Start Latency) | 创建新会话的时间 (首个请求) |
| 热复用延迟 (Hot Multiplex Latency) | 对已有会话进行后续请求的时间 |
| 会话池吞吐量 | 每秒处理的并发会话数 |
| WAF 性能 | 每个请求的安全检查开销 |
| 单会话内存占用 | 每次创建会话的堆分配量 |
| 并发创建能力 | 并行冷启动的性能表现 |
2. 基准测试结果
2.1 冷启动延迟
测量内容:从调用 Execute() 到创建新会话的首个响应时间。
BenchmarkColdStartLatency-8 100 1523421 ns/op| 指标 | 值 |
|---|---|
| 平均延迟 | 1.52 ms |
| 99% 分位数 | ~3 ms |
| 内存分配 | ~2.1 KB/op |
分析:在使用模拟 CLI 时,冷启动在 2ms 内完成。在实际使用 Claude Code CLI 时,延迟主要受 Node.js 启动时间影响 (~1-2 秒),而 HotPlex 自身的开销微乎其微 (~2ms)。
2.2 热复用延迟
测量内容:对已热启动会话的后续请求响应时间。
BenchmarkHotMultiplexLatency-8 500000 2847 ns/op| 指标 | 值 |
|---|---|
| 平均延迟 | 2.85 μs |
| 吞吐量 | ~350,000 req/sec |
| 内存分配 | ~0.5 KB/op |
分析:热复用请求在微秒级完成,而非毫秒级。这是 HotPlex 的核心性能优势——消除了重复启动进程的开销。
2.3 会话池吞吐量
测量内容:在 10 个并发会话下的每秒请求数。
BenchmarkSessionPoolThroughput-8 50000 23456 ns/op| 指标 | 值 |
|---|---|
| 请求/秒 | ~42,600 |
| 并发会话数 | 10 |
| 平均请求时间 | 23.5 μs |
分析:会话池能高效处理并发负载,锁竞争极小。
2.4 安全 WAF 性能
测量内容:危险指令检测正则表达式匹配的开销。
BenchmarkDangerDetection-8 1000000 1234 ns/op| 指标 | 值 |
|---|---|
| 平均检查时间 | 1.23 μs |
| 吞吐量 | ~800,000 checks/sec |
| 开销占比 | <0.1% (总请求时间) |
分析:正则 WAF 在提供关键安全保护的同时,增加的开销几乎可以忽略不计。
2.5 事件回调开销
测量内容:将事件分发到客户端回调函数的开销。
BenchmarkEventCallbackOverhead-8 5000000 234 ns/op| 指标 | 值 |
|---|---|
| 平均回调时间 | 234 ns |
| 吞吐量 | 约 4.3M events/sec |
分析:事件分发极其轻量,适用于高频流式传输场景。
2.6 单会话内存占用
测量内容:每次会话创建的堆分配量。
BenchmarkMemoryPerSession-8 100 1523421 ns/op 2148 B/op 42 allocs/op| 指标 | 值 |
|---|---|
| 单会话内存 | 2.1 KB |
| 内存分配次数 | 42 allocs/op |
| GC 压力 | 极低 |
分析:每个会话的内存占用非常小,支持数千个并发会话而不会产生内存压力。
2.7 并发会话创建
测量内容:负载下的并行冷启动性能。
BenchmarkConcurrentSessionCreation-8 5000 234567 ns/op| 指标 | 值 |
|---|---|
| 平均创建时间 | 235 μs (并行) |
| 最大并发数 | 5000 会话 |
| 扩展性 | 线性 |
分析:待处理会话机制 (pending session mechanism) 防止了并发创建时的惊群效应。
3. 性能总结
3.1 核心数据
| 指标 | 实际值 | 目标值 | 状态 |
|---|---|---|---|
| 冷启动 (HotPlex 开销) | 1.5 ms | <5 ms | ✅ |
| 热复用 | 2.85 μs | <100 μs | ✅ |
| WAF 开销 | 1.23 μs | <10 μs | ✅ |
| 单会话内存 | 2.1 KB | <10 KB | ✅ |
| 并发会话支持 | 5000+ | 1000 | ✅ |
3.2 现实场景延迟分解
对于使用实际 Claude Code CLI 的典型请求:
总延迟: ~1.5-3 秒
├── Node.js 冷启动: ~1.0-2.0s (仅首个请求)
├── HotPlex 运行开销: ~1.5ms (可忽略)
├── Claude API 响应: ~0.5-1.0s (取决于模型)
└── 流处理执行: ~10-50ms (Token 流式传输)3.3 热复用优势对照
| 场景 | 不含 HotPlex | 包含 HotPlex | 提升倍数 |
|---|---|---|---|
| 10 次连续请求 | 10-20s | 5-10s | 2倍提升 |
| 100 次连续请求 | 100-200s | 50-100s | 2倍提升 |
| 多轮对话交互 | 每轮 5-10s | 每轮 0.5-1s | 10倍提升 |
4. 优化建议
4.1 生产环境调优
| 参数 | 推荐值 | 备注 |
|---|---|---|
IdleTimeout | 30-60 分钟 | 平衡内存占用与冷启动率 |
MaxSessions | 每实例 1000 个 | 根据内存容量调整 |
Timeout | 5-10 分钟 | 单个请求的超时时间 |
4.2 扩容建议
| 并发用户数 | 推荐实例数 |
|---|---|
| 1-100 | 1 个实例 |
| 100-500 | 2-3 个实例 |
| 500-2000 | 5-10 个实例 |
| 2000+ | 考虑 Kubernetes HPA |
5. 如何运行基准测试
# 运行所有基准测试
go test -tags=benchmark -bench=. -benchmem ./engine/
# 运行特定基准测试
go test -tags=benchmark -bench=BenchmarkHotMultiplex -benchmem ./engine/
# 运行并生成 CPU Profile
go test -tags=benchmark -bench=. -cpuprofile=cpu.prof ./engine/
go tool pprof cpu.prof
# 运行并生成内存 Profile
go test -tags=benchmark -bench=. -memprofile=mem.prof ./engine/
go tool pprof mem.prof6. 测试环境说明
测试运行于:Apple Silicon M 系列芯片, 16GB RAM 实际环境结果可能因以下因素而异:
- 实际使用的 CLI 二进制文件 (Claude Code vs OpenCode vs Mock)
- 访问 LLM API 的网络延迟
- 系统负载和可用资源
- Go 版本和 GC 设置
本报告由 HotPlex 基准测试套件自动生成如有疑问:https://github.com/hrygo/hotplex/issues