Gosched:让出CPU时间片
Goexit:退出当前的协程
GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了。。。)
package main import ( "fmt" "runtime" ) func main() { go func() { for i:=0; i<=5; i++ { fmt.Println("go") } }() for i:=0; i<=2 ; i++ { fmt.Println("hello") } }
如果程序写在这样的话,那么子协程是永远都不会被执行的,因为在go中向来都先执行主协程,这里主协程的循环明显比子协程要短,那么子协程永远都不会被执行
所以需要主协程让出时间片去执行子协程,应该写成这个样子
package main import ( "fmt" "runtime" ) func main() { go func() { for i:=0; i<=5; i++ { fmt.Println("go") } }() for i:=0; i<=2 ; i++ { //这里它必须让出时间片,让其它的协程执行完之后再回来执行它 runtime.Gosched() fmt.Println("hello") } }
执行的结果
go
hello
go
go
go
go
go
hello
hello