Довольно новый для Голанга здесь и столкнулся с проблемой при сравнении производительности с goroutines.
Код, который я имею здесь:
type store struct{}
func (n *store) WriteSpan(span interface{}) error {
return nil
}
func smallTest(times int, b *testing.B) {
writer := store{}
var wg sync.WaitGroup
numGoroutines := times
wg.Add(numGoroutines)
b.ResetTimer()
b.ReportAllocs()
for n := 0; n < numGoroutines; n++ {
go func() {
writer.WriteSpan(nil)
wg.Done()
}()
}
wg.Wait()
}
func BenchmarkTest1(b *testing.B) {
smallTest(1000000, b)
}
func BenchmarkTest2(b *testing.B) {
smallTest(10000000, b)
}
Мне кажется, время выполнения и распределение дляоба сценария должны быть похожими, но выполнение их дает мне следующие результаты, которые сильно различаются.Интересно, почему это происходит?Откуда берутся эти дополнительные ассигнования?
BenchmarkTest1-12 1000000000 0,26 нс / операционная 0 B / op 0 allocs / операционная
BenchmarkTest2-12 1 2868129398 нс / операционная 31872 B /op 83 allocs / op
PASS
Я также заметил, что если я добавлю внутренний цикл к writeSpan
несколько раз, время выполнения и распределение будут относиться к numGoroutines * multiple times
.Если это не тот способ, которым люди сравнивают с программами, существуют ли другие стандартные способы тестирования?Заранее спасибо.