scatter-gather/src/go.go

43 lines
582 B
Go

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)
}