如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决
package main import "time" import fmt func main() { control := make(chan interface{},2) for i := 1; i <= 10; i++ { control <- i //这里应该放上面,如果放下面就会每次都执行三个了 go func(j int) { fmt.Printf(go func: %d,time: %d\n",j,time.Now().Unix()) time.Sleep(.Second) <-control }(i) } 主groutine不要断 for { .Second) } }
go func: 2,1)">time: 1574427632 go func: 1,1)">4,1)">15744276333,1)">5,1)">15744276346,1)">7,1)">15744276358,1)">9,1)">157442763610,1)">1574427636
看时间每次只是同时执行两个