首页 > 其他 > 详细

golang之goroutine和channel

时间:2020-02-03 23:53:58      阅读:139      评论:0      收藏:0      [点我收藏+]

多线程程序在单核上运行,就是并发

多线程程序在多核上运行,不是并行

Go协程和Go主线程

  Go主线程(线程):一个Go线程上,可以起多个协程 ,你可以这样理解,协程是轻量级的线程

  Go协程的特点:

    1)有独立的栈空间

    2)共享程序堆空间

    3) 调度由用户控制

    4)协程是轻量级的线程3

goroutine快速入门

func test() {
    for i := 1; i <= 10; i++ {
        fmt.Println("test() hello, world " + strconv.Itoa(i))
        time.Sleep(time.Second)
    }
}

func main() {
    go test()

    for i := 1; i <= 10; i++ {
        fmt.Println("main() hello, world " + strconv.Itoa(i))
        time.Sleep(time.Second)
    }
}

  小结:

    1)主线程是一个物理线程,直接作用在cpu上的,是重量级的,非常耗费cpu资源;

    2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小;

    3)Golang的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显Golang在并发上的优势了。

MPG模式基本介绍

  1)M:操作系统的主线程(是物理线程)

  2)P:协程执行需要的上下文

  3)G:协程

设置运行的cpu数目:

func main() {
    cupNum := runtime.NumCPU()
    fmt.Println(cupNum)

    // 设置运行的cpu数目
    runtime.GOMAXPROCS(cupNum)
}

 

golang之goroutine和channel

原文:https://www.cnblogs.com/xiangxiaolin/p/12258022.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!