[GO]runtime包及gosched的使用

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
原文地址:https://www.cnblogs.com/baylorqu/p/9672411.html