Go语言学习之goroutine详解

什么是goroutine?

Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法。相比于线程,它的创建和销毁的代价要小很多,并且它的调度是独立于线程的。在golang中创建一个goroutine非常简单,使用“go”关键字即可:

package mainimport ( “fmt” “time”)func learning() { fmt.Println(“My first goroutine”)}func main() { go learning() /* we are using time sleep so that the main program does not terminate before the execution of goroutine.*/ time.Sleep(1 * time.Second) fmt.Println(“main function”)}

这段代码的输出是这样的:

My first goroutinemain function

如果把Sleep去掉的话,输出就会变成:

main function

这是因为,和线程一样,golang的主函数(其实也跑在一个goroutine中)并不会等待其它goroutine结束。如果主goroutine结束了,所有其它goroutine都将结束。

下面看下Go语言学习之goroutine的相关内容。

协程Coroutine

特点

  • 轻量级的“线程”
  • 非抢占式多任务处理,由协程主动交出控制权
  • 编译器/解释器/虚拟机层面的多任务,非操作系统
  • 多个协程可以在一个或多个线程上执行

go关键字开启一个协程

func main() {
  for i := 0; i < 10; i++ {
    go func(i int) {
      for {
        fmt.Println(i)
      }
    }(i)
  }
  time.Sleep(time.Millisecond)
}

goroutine可能的切换点(转让控制权)

  • I/O,select
  • channel
  • 等待锁
  • 函数调用(有时)
  • routime.Goshed()
  • 只是参考,不能保证切换,不能保证在其他地方不切换

总结

以上所述是小编给大家介绍的Go语言学习之goroutine详解,希望对大家有所帮助!

阅读剩余 24%

原创文章,作者:TWURX,如若转载,请注明出处:https://www.beidanyezhu.com/a/26710.html

(0)
TWURX的头像TWURX
上一篇 2025-01-04
下一篇 2025-01-05

相关推荐

  • 图文详解(怎么申请苹果id账号)

    本文主要说明苹果开发者账号申请的流程,希望大家能够通过本文少走一些弯路,能够顺利完成苹果开发者账号的申请。关于新流程中可能出现的一些问题以及部分流程的变更均在下文中运用灰色块引用起…

  • 语言发育迟缓康复干货(语言发育迟缓怎么做康复训练)

    家有语言发育迟缓宝宝,最难的是什么吗? 语言发育迟缓宝宝训练有多难!最难的就是不能说话,不理解别人说话,早期发现时,多处于2-3岁,且行为能力有限,多数具有智力障碍和社交障碍,很多…

  • 三种手机膜详解(怎么贴手机钢化膜)

    自从三星推出了曲面屏手机以后,各大手机厂商都纷纷跟进,就好像旗舰手机中没有配备曲面屏就会显得不高端。而经过了好几代的更新改进后,三星已经开始放弃曲面屏设计,三星现在最新出的S20系…

  • 线性代数中矩阵的秩详解(秩怎么求)

    看到有小伙伴在问,矩阵的秩是什么,做了那么多题目,对于矩阵的秩还没系统的总结过,今天我就结合一下实际例题,来回答一下矩阵的秩是什么。 矩阵的秩 在线性代数中,一个矩阵A的列秩是A的…

  • 语言(逅怎么读)

    引 言吴语是汉语族的一个重要分支,分布在江苏南部、浙江省大部、上海市全境,安徽南部及福建、江西的小部分地区。学术界将其分爲太湖片、台州片、东瓯片、婺州片、处衢片、宣州片六个小片。其…

  • 语言的谋略(洛邑怎么读)

    第十七辑 国家政策辩论的谋略与技巧文/钟百超 每个人对一定事物或做法都有自己的主见,而这个主见的形成与个人的信仰、理念、知识、修养,乃至利益都有密切相关。一个人能否提出一个有利于国…

  • 一文详解(欢迎客户下单的句子)

    编辑导读:零食,自古以来一直颇受欢迎。如今的零食花样种类越来越多,口感丰富、包装精美、还有顶流代言,售价也越来越贵。这其中,少不了营销传播。本文作者对新品牌零食的渠道营销进行分析,…

  • 怎么在Ubuntu系统中安装Go语言

    下载Go语言 Go语言的安装包可以在官方网站上下载。在下载之前,您应该确认需要的系统版本和Go语言的版本。您可以按照以下命令查看您正在使用的Ubuntu版本: $ lsb…

  • Go语言中除法运算的效率怎么提高

    近年来,Go语言在程序员中的人气越来越高,在高并发场景下的优势尤为突出。作为一门强调高效率的语言,Go语言的性能一直 在计算机科学中,除法运算是一种非常常见的运算。在Go语言中,最…

  • 怎么使用Go语言实现数据转发功能

    首先,我们需要考虑数据实体的格式。在许多情况下,使用JSON格式最为方便。Go语言中有一个标准库“encoding/json”可以提供JSON编解码功能。我们可以使用它来将我们的数…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部