在golang中,异步是指不按照代码顺序执行,一个异步过程的执行将不再与原有的序列有顺序关系;在异步中,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。golang异步主要是由协程(goroutine)实现的;goroutine用来调用函数,当某个函数被go关键字调用后,go就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。
本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。
异步是什么?
异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。
简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
另一种解释就是:
给你两个容器,一个叫同步,一个叫异步,把要执行的代码分别分到同步和异步里面,先执行同步同时异步待编译,等同步执行完后执行异步里面的代码。
golang怎么实现异步
Go的异步主要是由协程(goroutine)实现的。协程相对于线程来说,占用的内存更少,更轻量级,这也是Go在性能上的优势。
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
[全部完成]
【相关推荐:Go视频教程、编程教学】
以上就是golang异步是什么的详细内容,更多请关注编程网其它相关文章!