网站地图    收藏   

主页 > 采坑 > 服务端采坑 > goLang采坑 >

golang中独占CPU导致其它Goroutine饿死

来源:未知    时间:2021-05-03 17:45 作者:小飞侠 阅读:

[导读] Goroutine是协作式调度, Goroutine本身不会主动放弃CPU: funcmain(){runtime.GOMAXPROCS(1)gofunc(){fori:=0;i10;i++{fmt.Println(i)}}()for{}//占用CPU} 解决的方法是在for循环加入runtime.Gosched()调度函数: funcmain(){ru...

Goroutine是协作式调度, Goroutine本身不会主动放弃CPU:

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
        }
    }()

    for {} // 占用CPU}

解决的方法是在for循环加入runtime.Gosched()调度函数:

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
        }
    }()

    for {
        runtime.Gosched()
    }}

或者是通过阻塞的方式避免CPU占用:

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
        }
    }()

    select{}}


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论