Go语言学习之goroutine详解

作者:180505 时间:2024-03-25 02:45:56 

什么是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详解,希望对大家有所帮助!

来源:https://www.cnblogs.com/LJQ-180505/archive/2020/02/16/12317255.html

标签:Go语言,goroutine
0
投稿

猜你喜欢

  • PHP判断密码强度的方法详解

    2023-06-14 03:00:08
  • python中PS 图像调整算法原理之亮度调整

    2021-02-09 17:51:01
  • CSS教程:轻松解决表格的nobr问题

    2008-10-29 11:55:00
  • Redux saga异步管理与生成器详解

    2023-07-24 02:53:52
  • MySQL Community Server 8.0.29安装配置方法图文教程

    2024-01-22 12:02:55
  • mysql中find_in_set()函数的使用及in()用法详解

    2024-01-25 18:32:38
  • Python Pandas list列表数据列拆分成多行的方法实现

    2021-04-20 18:56:01
  • 深入php内核之php in array

    2024-05-13 09:23:55
  • Python 含参构造函数实例详解

    2023-02-06 13:16:48
  • Python3列表List入门知识附实例

    2023-03-12 06:41:22
  • python 时间 T 去掉 带上ms 毫秒 时间格式的操作

    2021-12-16 23:24:45
  • 交互设计师心得——核心竞争力

    2010-01-19 13:45:00
  • VScode连接远程服务器上的jupyter notebook的实现

    2022-02-19 17:09:51
  • 对Python3 goto 语句的使用方法详解

    2023-10-14 11:32:49
  • Mysql中的find_in_set的使用方法介绍

    2024-01-14 06:24:19
  • python误差棒图errorbar()函数实例解析

    2023-12-14 22:39:49
  • Mysql 忘记root密码的完美解决方法

    2024-01-18 14:31:05
  • Python的MongoDB模块PyMongo操作方法集锦

    2021-02-05 17:59:03
  • 解决python3中cv2读取中文路径的问题

    2023-05-17 18:52:10
  • 如何在sublime编辑器中安装python

    2021-01-12 05:27:00
  • asp之家 网络编程 m.aspxhome.com