为了看golang多个goroutine上怎么调度,上代码:
```
package main
import(
"fmt"
)
func main(){
go func(){//goroutine 持续打印1
i:=1
fmt.Println(i)
}()
for{//main 程持续打印0
i:=0
fmt.Println(i)
}
}
```
实际上会一直打印0,也就是没有执行main之外的goroutine。
```
`package main`
`import(`
`"fmt"`
` "time"`
`)`
`func main(){`
`go func(){//goroutine 持续打印1`
`i:=1`
`fmt.Println(i)`
`}()`
`for{//main 程持续打印0`
` time.Sleep(time.Second*1)//每次阻塞一秒再打印`
`i:=0`
`fmt.Println(i)`
`}`
`}`
```
这里就可以发现别的goroutine在执行了。
实际工作中main程序会一直执行别的程序体,不会特意进行阻塞。这时候就要祭出golang的runtime了。
```
`package main`
`import(`
`"fmt"`
` "runtime"`
`)`
`func main(){`
`go func(){//goroutine 持续打印1`
`i:=1`
`fmt.Println(i)`
`}()`
` runtime.GOMAXPROCS(2)//运行机器是双核`
`for{//main 程持续打印0`
`i:=0`
`fmt.Println(i)`
`}`
`}`
```
这里的运行结果就可以看到预计的各个goroutine不停切换的效果了。
有疑问加站长微信联系(非本文作者)