写点什么

Golang 中的协程是干什么用的?

作者:liuzhen007
  • 2021 年 12 月 24 日
  • 本文字数:1162 字

    阅读完需:约 4 分钟

Golang中的协程是干什么用的?

目录

前言

正文

前言

Golang 语言中有一个其他语言都没有的秘密武器——Goroutine,也就是协程。 

正文

协程是 Golang 语言中特有的名词,他不同于进程 Process 和线程 Thread。Golang 语言中的 Goroutine 协程与线程类似,属于一种轻量的线程,但是它的创建成本非常小,比起创建线程来更加方便。我们一般使用 Goroutine 是执行某一个特定的任务,分工更加明确。

说了这么多,那么 Golang 是如何使用协程的呢?接下来我们通过一段代码来了解一下。

代码实例:

package main
import( "fmt" "time")// 主方法func main(){ go testgo() //使用关键字go调用函数或者方法开启一个goroutine for i:=0;i<5;i++ { time.Sleep(1000 * time.Millisecond) //让程序休眠1秒 fmt.Println("主函数打印",i) } fmt.Println("主函数结束") }// 协程函数func testgo() { for i:=0;i<5;i++ { fmt.Println("协程goroutine打印",i) }}
复制代码

代码执行结果:

协程 goroutine 打印 0 协程 goroutine 打印 1 协程 goroutine 打印 2 协程 goroutine 打印 3 协程 goroutine 打印 4 主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束

通过结果,我们可以发现协程的执行过程不受主程序休眠的影响,只要协程启动,它就会按照自己的逻辑去执行。所以,在主函数休眠的时候,协程把自己的打印任务都执行完了。

但是,是不是子协程的所有执行过程都不受主函数的影响呢?

答案是否定的。

我们把上面代码中的休眠语句注释掉,再来看看执行结果。

修改后的代码:

package mainimport(    "fmt"    //"time")// 主方法func main(){    go testgo() //使用关键字go调用函数或者方法开启一个goroutine    for i:=0;i<5;i++ {	//time.Sleep(1000 * time.Millisecond) //让程序休眠1秒        fmt.Println("主函数打印",i)    }    fmt.Println("主函数结束")    }// 协程函数func testgo() {    for i:=0;i<5;i++ {        fmt.Println("协程goroutine打印",i)    }}
复制代码

执行结果:

主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束 

多执行几次,有时候会有如下结果:

协程 goroutine 打印 0 主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束

通过结果,我们得出如下结论:当主函数停止后,子协程也会终止,即使它还有没有执行完毕。此时,子协程可能还没有执行,也可能执行了一半。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄


发布于: 5 小时前
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
Golang中的协程是干什么用的?