in benchmarks/benchmark.go [15:48]
func RunBenchmark(name string, goroutines int, iterations int, operation operations.BenchmarkOperation) {
h := hist.NewHistogram(1000, int(60*time.Second))
recorder := make(chan interface{}, 128)
go bender.Record(recorder, bender.NewHistogramRecorder(h))
log.Printf("Running %v. Iterations %v, concurrency %v", name, iterations, goroutines)
var wg sync.WaitGroup
start := time.Now().UnixNano()
recorder <- &bender.StartEvent{Start: start}
for i := 1; i <= goroutines; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i <= iterations; i++ {
start := time.Now().UnixNano()
recorder <- &bender.StartRequestEvent{Time: start, Request: nil}
err := operation.Run()
recorder <- &bender.EndRequestEvent{Start: start, End: time.Now().UnixNano(), Response: nil, Err: err}
}
}()
}
wg.Wait()
recorder <- &bender.EndEvent{Start: start, End: time.Now().UnixNano()}
fmt.Println(h)
}