我想对函数进行基准测试:test()
,使用不同数量的线程。
var t1 = time.Now()
test()
var elapsed1 = time.Since(t1)
1 ns / operation
runtime.GOMAXPROCS(1)
var t1 = time.Now()
go test()
var elapsed1 = time.Since(t1)
1.10 ^ -6 ns / operation
func test() {
for i := 0; i < 1000000000; i++ {
float_result = f1 + f2
float_result = f1 - f2
float_result = f1 * f2
float_result = f1 / f2
float_result = f1 + f2
float_result = f1 - f2
float_result = f1 * f2
float_result = f1 / f2
float_result = f1 + f2
float_result = f1 - f2
float_result = f1 * f2
float_result = f1 / f2
float_result = f1 + f2
float_result = f1 - f2
float_result = f1 * f2
float_result = f1 / f2
float_result = f1 + f2
float_result = f1 - f2
float_result = f1 * f2
float_result = f1 / f2
}
}
runtime.GOMAXPROCS(n)
的goroutine是否等同于使用n个线程?答案 0 :(得分:7)
您没有衡量go test()
运行的时间,而是衡量使用// somewhere in your main package
var wg sync.WaitGroup
func test() {
// first lines in test() should be
wg.Add(1)
defer wg.Done()
...
}
// benchmark
runtime.GOMAXPROCS(1)
var t1 = time.Now()
go test()
wg.Wait()
var elapsed1 = time.Since(t1)
调用/创建新goroutine所需的时间。
你需要等待你的goroutine完成,例如使用sync.Waitgroup。
valid_sizes
答案 1 :(得分:1)
你想要测试的东西如此之小,以至于测量误差占主导地位。应该调整您的基准迭代,直到基准函数持续足够长的时间以便可靠地计时。您的基准测试应该运行大约一秒钟才有意义。