November 2017
Intermediate to advanced
670 pages
17h 35m
English
We could increase the number of buffers by the number of CPU cores available:
func main() { orders := GetOrders() numberOfOrders := len(orders) cpus := runtime.NumCPU() runtime.GOMAXPROCS(cpus) input := make(chan Order, cpus) output := make(chan Order, cpus) for i := 0; i < numberOfOrders; i++ { go func() { for order := range input { output <- Pipeline(order) } }() } for _, order := range orders { input <- *order } close(input) for i := 0; i < numberOfOrders; i++ { fmt.Println("The result is:", <-output) } }
The use of I/O buffers is an improvement on our design, but there is actually a better solution.