gpt4 book ai didi

Go语言学习之goroutine详解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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关键字开启一个协程 。

?
1
2
3
4
5
6
7
8
9
10
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详解的文章就讲到这里了,如果你想了解更多关于Go语言学习之goroutine详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com