Go语言通过go test的benchmark功能测试并发性能,使用Benchmark开头的函数和*testing.B参数,结合b.RunParallel模拟高并发,评估吞吐量与响应时间。示例中对比sync.Map与sync.Mutex,结果显示sync.Map在并发读写中性能更优(250 ns/op vs 400 ns/op),通过-benchmem可分析内存分配,建议多次运行取平均值并结合-race和pprof排查竞争与热点,确保测试贴近真实场景。

Go语言的并发性能测试主要通过
go test
在Go中,基准测试函数以
Benchmark
*testing.B
b.RunParallel
示例:测试并发读写map的性能(使用
sync.Map
func BenchmarkSyncMap(b *testing.B) {
var m sync.Map
b.RunParallel(func(pb *testing.PB) {
i := 0
for pb.Next() {
m.Store(i, i)
m.Load(i)
i++
}
})
}
b.RunParallel会启动多个goroutine并行执行测试逻辑,pb.Next()控制每个goroutine的迭代次数,确保总运行次数接近
b.N
立即学习“go语言免费学习笔记(深入)”;
执行命令:
go test -bench=.
典型输出:
BenchmarkSyncMap-8 5000000 250 ns/op
含义:
可附加参数提升测试精度:
-benchtime=1s
-count=3
-cpu=1,2,4
通过命名区分不同实现,便于横向比较。例如对比
sync.Mutex
sync.Map
func BenchmarkMutexMap(b *testing.B) {
var mu sync.Mutex
m := make(map[int]int)
b.RunParallel(func(pb *testing.PB) {
i := 0
for pb.Next() {
mu.Lock()
m[i] = i
_ = m[i]
mu.Unlock()
i++
}
})
}
运行后输出类似:
BenchmarkMutexMap-8 3000000 400 ns/op BenchmarkSyncMap-8 5000000 250 ns/op
可见
sync.Map
写好并发benchmark需要注意以下几点:
-race
go test -bench=. -benchmem
基本上就这些。写好并发benchmark不复杂,但容易忽略细节。关键是模拟真实负载,准确反映系统行为。
以上就是Golang并发性能测试 benchmark评估方法的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号