我是Go的并发新手,我正试图弄清楚如何使用通道来控制并发性。我想做的是有一个循环,我可以使用一个新的go例程调用一个函数,并在该函数处理时继续循环,我想限制运行到3的例程的数量。我的第一次尝试这样做是下面的代码:
func write(val int, ch chan bool) {
fmt.Println("Processing:", val)
time.Sleep(2 * time.Second)
ch <- val % 3 == 0
}
func main() {
ch := make(chan bool, 3) // limit to 3 routines?
for i := 0; i< 10; i++ {
go write(i, ch)
resp := <- ch
fmt.Println("Divisible by 3:", resp)
}
time.Sleep(20 * time.Second)
}
我的印象是,这基本上会一次调用write
3,然后继续处理下一个3,直到前3个完成。根据记录的内容,它似乎只是一次处理一个。代码可以是found and executed here。
在此示例中,我需要更改哪些内容才能获得上述功能?