Всем привет. Понадобилось мне как то посчитать производительность сервера. И поставили задачу вычислить минимальное, максимальное, и среднее время на обработку запроса.
Короче я делал, делал и не мог понять, почему на холостом ходу микросекунды, а на тесте какие то странные цифры.
Начал исследовать причину. И я ее нашел. И теперь задаюсь вопросом: или лыжи не едут или в go баг?
count := 100000
wg := sync.WaitGroup{}
wg.Add(count)
dur2 := atomic.Int64{}
at := time.Now()
for i := 0; i < count; i++ {
go func() {
defer wg.Done()
at2 := time.Now()
for k := 0; k < 1000000; k++ {
}
dur2.Add(int64(time.Since(at2)))
}()
}
wg.Wait()
durOne := time.Since(at) / time.Duration(count)
durGo := time.Duration(dur2.Load() / int64(count))
log.Println("Duration parallel: one ", durOne.String(), " goroutine ", durGo.String())
результат:2024/10/30 20:34:35 Duration parallel: one 35.319µs goroutine 1.096925ms
go version go1.23.1 windows/amd64
goos: windows
goarch: amd64
cpu: 12th Gen Intel(R) Core(TM) i7-1255U
Баг проявляется и на винде и на linux
Напишите в комментариях, сталкивались ли Вы с таким багом и что вы думаете по этому поводу