benchmark

command
v0.1.0-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2025 License: MIT Imports: 17 Imported by: 0

README

Go-GroupMQ Benchmark

标准化性能测试工具,用于与 TypeScript 版本进行公平对比。

快速开始

# CPU密集型测试(PBKDF2加密)
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4

# IO密集型测试(文件读写)
go run benchmark/main.go -type=io -jobs=5000 -workers=4

# 空任务测试(最小开销)
go run benchmark/main.go -type=empty -jobs=10000 -workers=8

# 输出到JSON
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4 -output=results/go-cpu.json

测试场景

1. CPU 密集型 (cpu)
  • 模拟计算密集任务
  • PBKDF2 加密,200,000 次迭代
  • 对应 TS 版本:--job-type cpu
2. IO 密集型 (io)
  • 模拟高 IOPS 场景
  • 64KB 文件读写
  • 对应 TS 版本:--job-type io
3. 空任务 (empty)
  • 测试框架最小开销
  • 仅 Sleep(0)
  • 对应 TS 版本:--job-type empty

指标说明

性能指标
  • Throughput: 吞吐量(jobs/sec)
  • PickupMs: 从入队到 worker 获取的延迟
  • ProcessingMs: job 执行时间
  • TotalMs: 端到端延迟
系统指标
  • CPU: CPU 使用率(峰值/平均值)
  • Memory: 内存使用(峰值/平均值,MB)
Redis 指标
  • Commands: Redis 命令总数
  • AvgLatency: 平均命令延迟(μs)
  • TopCommands: 最常用命令统计

对比测试

与 TypeScript 版本对比:

# 1. 运行TS版本
cd ../3rd-projects/groupmq
pnpm benchmark --mq groupmq --jobs 5000 --workers 4 --job-type cpu --multi-process

# 2. 运行Go版本
cd ../../go-groupmq
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4

# 3. 对比结果
go run benchmark/compare.go results/groupmq.json results/go-cpu.json

输出格式

JSON 格式,兼容 TS 版本结构:

{
  "timestamp": 1234567890,
  "queueType": "go-groupmq",
  "jobType": "cpu",
  "totalJobs": 5000,
  "workersCount": 4,
  "completedJobs": 5000,
  "durationMs": 10000,
  "throughputJobsPerSec": 500,
  "avgPickupMs": 10.5,
  "avgProcessingMs": 65.2,
  "avgTotalMs": 75.7,
  "p95PickupMs": 25.3,
  "p95ProcessingMs": 70.8,
  "p95TotalMs": 95.1,
  "peakCpuPercent": 85.5,
  "peakMemoryMB": 45.2,
  "avgCpuPercent": 65.3,
  "avgMemoryMB": 38.5
}

性能优化建议

基于 benchmark 结果:

  1. 高吞吐量: 增加 workers 数量
  2. 低延迟: 优化 Redis 连接池
  3. 低内存: 减少并发度
  4. 高 CPU 利用率: 使用多进程模式

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL