突然想到了之前一直没留意的for循环中开goroutine的执行顺序问题,就找了段代码试了试,试了几次后发现几个有意思的地方,我暂时没有精力往更深处挖掘,希望有golang大神能简单说一说这几个地方是怎么回事。
代码:
package main import "fmt" func Count(ch chan int) { fmt.Println("Count doing") ch <- 1 fmt.Println("Counting") } func main() { chs := make([]chan int, 100) for i := 0; i < 100; i++ { chs[i] = make(chan int) go Count(chs[i]) fmt.Println("Count",i) } for i, ch := range chs { <-ch fmt.Println("Counting ", i) } }
试了几次之后,反复的想goroutine执行的问题。
根据下面的输出,我能看到的是:
1. for循环的速度 比 for中开出goroutine并执行的速度 执行的快
2. 但是 开goroutine和执行第一个fmt的速度可能赶上 for循环的速度 比如前12个count和count doing
3. 关键问题,第二个for循环执行的fmt竟然要比goroutine中的第二个fmt快??(放入channel很耗时?)