zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    左旋一个字符串和手摇反转法
    LCS
    游戏服务器学习_1
    面试题_带答案_2
    面试题_带答案
    安卓_13
    安卓_12activity
    安卓_12
    多盟_1
    安卓没删干净导致报错
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9672411.html
Copyright © 2011-2022 走看看