package main import ( "fmt" "log" ) func main() { N := 100 P := 3 q := make(chan int) scatter(N, P, q) gather(N, P, q) } func scatter(N, P int, q chan int) { for i := 0; i < P; i++ { go _scatter(i, N, P, q) } } func _scatter(i, N, P int, q chan int) { start := i * (N / P) chunk := N / P if i == P-1 { chunk += N % P } ttl := 0 for j := start; j <= start+chunk; j++ { ttl += j } log.Println(i, N, P, q, start, start+chunk, ttl) q <- ttl } func gather(N, P int, q chan int) { ttl := 0 for i := 0; i < P; i++ { ttl += <-q } fmt.Println("go", ttl) }