当前位置:网站首页>GO语言-goroutine协程的使用
GO语言-goroutine协程的使用
2022-06-24 13:03:00 【一边学习一边哭】
前言
协程的英文coroutine,go语言中的协程为goroutine。Go是并发语言,而不是并行语言。
go语言的协程创建十分简单,只需要在调用的函数前面加上go关键字,程序就会同事运行一个新的goroutine。
但是goroutine中没有返回值,会忽略返回值。所以往往需要通过channel进行goroutine之间的通信。
goroutine使用
func main() {
go mytest()
for i := 0; i < 100; i++ {
fmt.Println("主函数输出:", i)
}
}
func mytest() {
for i := 0; i < 500; i++ {
fmt.Println("goroutine中输出数字:", i)
}
}
通过这个简单的示例输出,可以总结goroutine的两个特点:
- goroutine协程中的函数执行和主函数的执行是同时的,输出内容是交替的。
- 主程序结束后,即使子goroutine没有执行完成,也会随主程序一同结束。
sync包-WaitGroup
一般情况下,主程序结束后,子goroutine就会结束。
为了让主程序等待子groutine执行完成,一种方法是使用sleep。但是sleep存在一个问题是,我们没办法知道子goroutine需要执行的具体时长,只能尽量放长sleep的时间。
所以我们可以使用到sync包的WaitGroup解决主进程等待子goroutine的问题。
var wg sync.WaitGroup
func main() {
wg.Add(1) //定义WaitGroup队列长度,长度为1
go mytest()
for i := 0; i < 100; i++ {
fmt.Println("主函数输出:", i)
}
wg.Wait() //主程序最后,等待WaitGroup队列为0时再退出
}
func mytest() {
for i := 0; i < 500; i++ {
fmt.Println("goroutine中输出数字:", i)
}
wg.Done() //相当于wg.Add(-1),一个goroutine结束,调用wg.Done(),队列减一
}
wg.Add(1) 主函数中,定义WaitGroup队列长度
wg.Done() 子goroutine中,函数最后调用,相当于将WaitGroup队列长度-1
wg.Wait() 主函数中,在主函数的最后,等待WaitGroup队列长度为0
边栏推荐
猜你喜欢

AutoRF:从单视角观察中学习3D物体辐射场(CVPR 2022)

初识云原生安全:云时代的最佳保障
![NPM package [details] (including NPM package development, release, installation, update, search, uninstall, view, version number update rules, package.json details, etc.)](/img/b0/85ac6274b239e42c9543fa296df456.png)
NPM package [details] (including NPM package development, release, installation, update, search, uninstall, view, version number update rules, package.json details, etc.)

Convolution kernel and characteristic graph visualization

c语言---18 函数(自定义函数)

打败 二叉树!
![二叉树中最大路径和[处理好任意一颗子树,就处理好了整个树]](/img/d0/91ab1cc1851d7137a1cab3cf458302.png)
二叉树中最大路径和[处理好任意一颗子树,就处理好了整个树]

unity 等高线创建方法

Baidu map API drawing points and tips

Overview of SAP marketing cloud functions (III)
随机推荐
Return to new list
OpenHarmony 1
Research on MySQL composite index
P2PDB 白皮书
The function and principle of key in V-for
厨卫电器行业B2B交易协同管理平台开发,优化企业库存结构
How to avoid placing duplicate orders
[untitled]
【环境搭建】zip 分卷压缩
数字臧品系统开发 NFT数字臧品系统异常处理源码分享
Operation of simulated examination platform for examination questions of coal production and operation units (safety production management personnel) in 2022
Jupiter notebook operation
简谈企业Power BI CI /CD 实施框架
[learn ZABBIX from scratch] I. Introduction and deployment of ZABBIX
[leetcode] 10. Regular expression matching
conda和pip命令
Can a team do both projects and products?
Jupyter notebook操作
10_ Those high-profile personal signatures
【LeetCode】10、正则表达式匹配