zoukankan      html  css  js  c++  java
  • Go 协程

    go协程

    package main
    
    import (
        "fmt"
        "runtime"
        "time"
    )
    
    //goroutine--->协程---2kb大小,100
    //线程----》几个m
    //go协程会复用线程
    
    // goroutine之间通信,通过 信道channel 通信
    //go推崇用信道通信,而不推崇用共享变量通信(锁,死锁)
    
    
    //启动一个goroutine
    
    func test()  {
        fmt.Println("go go go")
    }
    //func main() {
    //    fmt.Println("主线程开始执行")
    //    go test()
    //    go test()
    //    go test()
    //    go test()
    //    go test()
    //    go test()
    //    go test()
    //    go test()
    //    time.Sleep(1*time.Second)
    //    fmt.Println("主线程结束执行")
    //    //go语言中,主线程不会等待goroutine执行完成,要等待它结束需要自己处理
    //}
    
    //func main() {
    //    fmt.Println("主线程开始执行")
    //    for i:=0;i<10;i++ {
    //        go func(){
    //            fmt.Println("go go go ")
    //
    //        }()
    //    }
    //    time.Sleep(1*time.Second)
    //    fmt.Println("主线程结束执行")
    //    //go语言中,主线程不会等待goroutine执行完成,要等待它结束需要自己处理
    //}
    
    
    // go 关键字开启goroutine,一个goroutine只占2kb
    
    /*
    go语言的GMP模型
        -G:开的goroutine
        -M:M当成操作系统真正的线程,实际上是用户线程(用户线程)
        -P:Processor:现在版本默认情况是cpu核数(可以当做cpu核数)
    
        用户线程,操作系统线程
        python中,开的线程开出用户线程,用户线程跟操作系统线程1:1的对应关系
        某些语言,用户线程和操作系统线程是n:1的关系
        go语言,用户线程和操作系统线程是 n:m的关系
     */
    
    
    //举个例子
    
    func main() {
            //设置P的大小,认为是cpu核数即可
            runtime.GOMAXPROCS(1)
            fmt.Println("主线程开始执行")
            go func() {
                for  {
                    fmt.Println("xxxx")
    
                }
            }()
            //for i:=0;i<10;i++ {
            //    go func(){
            //        for  {
            //            fmt.Println("我是死循环")
            //
            //        }
            //
            //    }()
            //}
            time.Sleep(10*time.Second)
            fmt.Println("主线程结束执行")
    }

    GMP模型

    Go的调度器通常被称为G-M-P模型,实际包含四个结构,分别为:
    G:Goroutine,每个Gotoutine
    
    M:machine,计算机线程
    
    P:Processor,表示逻辑处理器(程序阶段可以定义它的大小,如果不写,就是cup核数),程序级别的线程
        
        
        

  • 相关阅读:
    HDU 1536 sg-NIM博弈类
    Codeforces Round #361 (Div. 2)
    计蒜课复赛 联想电脑
    codevs3044 线段树+扫描线
    yii设置返回数据为JSON格式
    mysql中的查询优化
    计算两个经纬度间的距离
    一维数组打乱顺序shuffle函数
    array_filter可以去除数组中value为空的键值
    二维数组按某值分组求和
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14886756.html
Copyright © 2011-2022 走看看