Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go(goroutine)控制异步

go语言之go(goroutine)控制异步详解

作者:你是我的幸运儿

Go语言通过goroutine实现并发,允许异步执行函数,但单独使用会引发顺序问题,需结合WaitGroup确保主线程等待所有并发任务完成后再输出结果,从而正确同步执行流程

go(goroutine)控制异步

Go 语言是一种并发编程语言,在 Go 里有一个非常重要的关键字 go(goroutine),一般我们可以用它做一些异步,并发的任务。

goroutine 用来调用函数,当某个函数被 go 关键字调用后,go 就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。

示例

package main
import (
	"fmt"
)
func main() {
	go work1()
	go work2()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
}
func work2(){
	fmt.Println("work2")
}

结果

[全部完成]

当然这是一个不恰当的示例,但这也证明了异步执行,在调用work1,work2之后不等输出结果,就继续执行了。

要想等异步执行完之后,再执行最后的输出,需要加入WaitGroup

正确示例

package main

import (
	"fmt"
	"sync"
)

var waitGroup sync.WaitGroup
func main() {
	waitGroup.Add(2)
	go work1()
	go work2()
	waitGroup.Wait()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
	waitGroup.Done()
}
func work2(){
	fmt.Println("work2")
	waitGroup.Done()
}

结果:

work2
work1
[全部完成]

WaitGroup详解,见:https://www.jb51.net/jiaoben/34632015w.htm

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文