zoukankan      html  css  js  c++  java
  • gosched

    Go语言runtime.Gosched()函数浅析

    这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。

    请看下面这个例子(show.go):

    package main
    
    import (
        "fmt"
    )
    
    func showNumber (i int) {
        fmt.Println(i)
    }
    
    func main() {
    
        for i := 0; i < 10; i++ {
            go showNumber(i)
        }
    
        fmt.Println("Haha")
    }

    执行结果如下:

    [root@Fedora goEx]# go build show.go
    [root@Fedora goEx]# ./show
    Haha

    没有打印出数字,可以看到goroutine没有获得机会运行。

    修改代码:在main函数中加上runtime.Gosched()

    package main
    
    import (
        "fmt"
        "runtime"
    )
    
    func showNumber (i int) {
        fmt.Println(i)
    }
    
    func main() {
    
        for i := 0; i < 10; i++ {
            go showNumber(i)
        }
    
        runtime.Gosched() //GoSched虽然让出cpu使用权,但是依然会被调度,在执行很长一段时间后有机会刚好获得cpu使用权,不一定等到所有其他go程执行完了才执行,它出让cpu的量级比sleep小的多,因为cpu的调度是随机的
        fmt.Println("Haha")
    }

    编译运行:

    [root@Fedora goEx]# go build show.go
    [root@Fedora goEx]# ./show
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Haha

    可以看到goroutine获得了运行机会,打印出了数字。





  • 相关阅读:
    django序列化器Serializers
    django中模型类变更问题
    django图书管理系统-外键字段的增删改查
    django图书管理系统模型创建
    django中使用KindEditor上传图片
    成长
    git提交代码的经验
    react项目打包
    node——moudle
    git
  • 原文地址:https://www.cnblogs.com/hualou/p/12069997.html
Copyright © 2011-2022 走看看