本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

异步是什么?

异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。

简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。


(资料图片仅供参考)

另一种解释就是:

给你两个容器,一个叫同步,一个叫异步,把要执行的代码分别分到同步和异步里面,先执行同步同时异步待编译,等同步执行完后执行异步里面的代码。

golang怎么实现异步

Go的异步主要是由协程(goroutine)实现的。协程相对于线程来说,占用的内存更少,更轻量级,这也是Go在性能上的优势。

Go 语言是一种并发编程语言,在 Go 里有一个非常重要的关键字 go(goroutine),一般我们可以用它做一些异步,并发的任务。goroutine 用来调用函数,当某个函数被 go 关键字调用后,go 就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。

示例:

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

结果:

[全部完成]

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

正确示例:

package mainimport ("fmt""sync")var waitGroup sync.WaitGroupfunc 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()}

结果:

work2work1[全部完成]

以上就是golang异步是什么的详细内容,更多请关注php中文网其它相关文章!

推荐内容