关于chan的一些处理方式,请大家指点一下

1034992601 · · 866 次点击
这是其中的一种控制模型 ```golang package main import "fmt" func main() { msg := make(chan int) // poolSize := make(chan bool, 10) poolSize:=10 for i := 1; i <= poolSize; i++ { go doSomeThing(msg, i) } for m := range msg { fmt.Println(m) } fmt.Println("end") } func doSomeThing(message chan<- int, value int) { for { func(message chan<- int, value int) { message <- value }(message, value) } } ``` 另一种控制模型 ```golang import "fmt" func main() { msg := make(chan int) poolSize := make(chan bool, 10) for i := 1; i <= 100; i++ { go doSomeThing(msg, poolSize, i) } for m := range msg { fmt.Println(m) } fmt.Println("end") } func doSomeThing(message chan<- int, poolSize chan bool, value int) { poolSize <- true defer func() { <-poolSize }() func(message chan<- int, value int) { message <- value }(message, value) } ``` 这种模型同样会创建100个goroutine,只不过这些routine都在等待,同时活动的数量是poolsize
#1