美文网首页
Golang-GMP模型的协程调度

Golang-GMP模型的协程调度

作者: 沙蒿同学 | 来源:发表于2023-01-04 16:54 被阅读0次

项目仓库:
https://github.com/Benny66/goStudy.git

/*
1、runtime.GOMAXPROCS(1) 设置了 P 只有一个,即程序只能运行一个 协程(Goroutine);
2、主协程 main 被挂载在这个唯一 P 中;
3、两个 for 循环创建了 20 个协程(Goroutine),因为 P 正在被占用,所有的 Goroutine 依次挂在这个 P 的待执行的队列中
    这里需要关注一下协程的创建与挂载在 P 下的逻辑。
    因为执行结果可见,如果忽视第一行结果可见,这个 Goroutine 的执行是 FIFO (先进先出)的关系
    而第一行结果出现的原因是,P 有两个队列,一个是这个 FIFO 的队列,还有一个叫做 runnext 的队列。新创建的 Goroutine 会先被挂在这个 runnext 中;
*/
func TestGoroutine(t *testing.T) {
    runtime.GOMAXPROCS(1)
    wg := sync.WaitGroup{}
    wg.Add(20)
    for i := 0; i < 10; i++ {
        go func() {
            fmt.Println("i1: ", i)
            wg.Done()
        }()
    }
    for i := 0; i < 10; i++ {
        go func(i int) {
            fmt.Println("i2: ", i)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

相关文章

  • Golang-GMP模型的协程调度

    项目仓库:https://github.com/Benny66/goStudy.git[https://githu...

  • [Android] 深入理解Kotlin协程

    Kotlin协程 协程由程序自己创建和调度,不需要操作系统调度,所以协程比线程更加轻量。相比于线程的切换,协程切换...

  • Go语言——goroutine并发模型

    Go语言——goroutine并发模型 参考: Goroutine并发调度模型深度解析&手撸一个协程池 Golan...

  • 协程

    协程与线程 线程的调度是由操作系统负责,协程调度是程序自行负责 与线程相比,协程减少了无谓的操作系统切换 协程实际...

  • [libco] 协程调度

    libco 通过 co_resume 和 co_yield 交替调度协程。 文章来源:[libco] 协程调度[h...

  • 十分钟看懂:Java并发——协程

    协程 协程可以理解为一种轻量级的线程 从操作系统的角度来看,线程是在内核态中调度的,而协程是在用户态调度的,协程的...

  • golang的goroutine

    1.mpg模型介绍。 2.调度队列的介绍,调度算法的介绍。 3.与操作系统底层线程的交互与对应。 4.协程的特点。...

  • Openresty协程调度对比Go协程调度

    在web编程领域,Openresty与Go均有十分优秀的处理能力,在面对高并发的web编程,两者一般都是首选的技术...

  • GPM调度模型

    目录 1.什么是进程调度2.并发与并行3.进程、线程与协程4.Golang的调度机制——GPM模型5.总结 1. ...

  • SRS流媒体服务器源码分析(一):Rtmp publish流程

    线程模型 srs使用了state-threads协程库,是单线程多协程模型。这个协程的概念类似于lua的协程,都是...

网友评论

      本文标题:Golang-GMP模型的协程调度

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