package main import "time" import "fmt" import "sync" func main() { fmt.Println("Testing speed of recv+send loop") const count = 10000000 c := make(chan []byte, 1) c <- []byte{} var wg sync.WaitGroup worker := func() { for idx := 0; idx < count; idx++ { p := <-c select { case c <- p: default: } } wg.Done() } nIter := 0 start := time.Now() for idx := 0; idx < 1; idx++ { go worker() nIter += count wg.Add(1) } wg.Wait() stop := time.Now() timed := stop.Sub(start) fmt.Printf("%d iterations in %s\n", nIter, timed) fmt.Printf("%f iterations per second\n", float64(nIter)/timed.Seconds()) fmt.Printf("%s per iteration\n", timed/time.Duration(nIter)) }