Golang 中的协程是干什么用的?
目录
前言
正文
前言
Golang 语言中有一个其他语言都没有的秘密武器——Goroutine,也就是协程。
正文
协程是 Golang 语言中特有的名词,他不同于进程 Process 和线程 Thread。Golang 语言中的 Goroutine 协程与线程类似,属于一种轻量的线程,但是它的创建成本非常小,比起创建线程来更加方便。我们一般使用 Goroutine 是执行某一个特定的任务,分工更加明确。
说了这么多,那么 Golang 是如何使用协程的呢?接下来我们通过一段代码来了解一下。
代码实例:
代码执行结果:
协程 goroutine 打印 0 协程 goroutine 打印 1 协程 goroutine 打印 2 协程 goroutine 打印 3 协程 goroutine 打印 4 主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束
通过结果,我们可以发现协程的执行过程不受主程序休眠的影响,只要协程启动,它就会按照自己的逻辑去执行。所以,在主函数休眠的时候,协程把自己的打印任务都执行完了。
但是,是不是子协程的所有执行过程都不受主函数的影响呢?
答案是否定的。
我们把上面代码中的休眠语句注释掉,再来看看执行结果。
修改后的代码:
执行结果:
主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束
多执行几次,有时候会有如下结果:
协程 goroutine 打印 0 主函数打印 0 主函数打印 1 主函数打印 2 主函数打印 3 主函数打印 4 主函数结束
通过结果,我们得出如下结论:当主函数停止后,子协程也会终止,即使它还有没有执行完毕。此时,子协程可能还没有执行,也可能执行了一半。
作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄
版权声明: 本文为 InfoQ 作者【liuzhen007】的原创文章。
原文链接:【http://xie.infoq.cn/article/0713ab6609a7cd4345f875cfd】。文章转载请联系作者。
评论