美文网首页
Go语言学习笔记-并发编程-协程机制

Go语言学习笔记-并发编程-协程机制

作者: noonenote | 来源:发表于2019-04-22 16:30 被阅读0次

    Thread vs Groutine

    1. 创建时默认的stack的大小
    • JDK5以后Java Thread stack默认为1M
    • Groutine的stack初始化大小为2k

    协程是更轻量级的线程

    1. 和KSE(kernel space Entity)的对应关系
    • Java Thread是1:1
    • Grountine是M:N

    如何提高并发能力

    1. 协程处理器启动时,计数器记录协程数量,当协程数量过一段时间不变时,做一个标记,遇到非内联函数,中断当前协程,把他放到协程队列的队尾。这就能处理单个协程处理时间过长的问题。
    2. 协程被系统线程中断时,如IO,协程处理器移动到另外一个系统线程中,继续执行队列中的协程,被中断的协程被唤醒时,它会被加入到某个processor的等待队列里,或全局等待队列里。
    package groutine_test
    
    import (
            "fmt"
            "testing"
            "time"
    )
    
    func TestGroutine(t *testing.T) {
            var a int
            a = 5
            fmt.Println(a)
            for i := 0; i < 10; i++ {
                    go func(i int) {
                            //time.Sleep(time.Second * 1)
                            fmt.Println(i)
                    }(i)
            }
            time.Sleep(time.Millisecond * 50)
    }
    

    相关文章

      网友评论

          本文标题:Go语言学习笔记-并发编程-协程机制

          本文链接:https://www.haomeiwen.com/subject/jzlrgqtx.html