go語言之go(goroutine)控制異步詳解
go(goroutine)控制異步
Go 語言是一種并發(fā)編程語言,在 Go 里有一個非常重要的關(guān)鍵字 go(goroutine),一般我們可以用它做一些異步,并發(fā)的任務(wù)。
goroutine 用來調(diào)用函數(shù),當(dāng)某個函數(shù)被 go 關(guān)鍵字調(diào)用后,go 就會創(chuàng)建一個類似協(xié)程的東西,來執(zhí)行這個函數(shù),這樣可以輕易的實現(xiàn)并發(fā)。
示例
package main
import (
"fmt"
)
func main() {
go work1()
go work2()
fmt.Println("[全部完成]")
}
func work1(){
fmt.Println("work1")
}
func work2(){
fmt.Println("work2")
}
結(jié)果
[全部完成]
當(dāng)然這是一個不恰當(dāng)?shù)氖纠@也證明了異步執(zhí)行,在調(diào)用work1,work2之后不等輸出結(jié)果,就繼續(xù)執(zhí)行了。
要想等異步執(zhí)行完之后,再執(zhí)行最后的輸出,需要加入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()
}
結(jié)果:
work2 work1 [全部完成]
WaitGroup詳解,見:http://www.dhdzp.com/jiaoben/34632015w.htm
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何使用pprof簡單檢測和修復(fù)Go語言中的內(nèi)存泄漏
雖然?Go?有自動垃圾回收(GC),它能回收不再被使用的內(nèi)存,但這并不意味著?Go?程序中不會發(fā)生內(nèi)存泄漏,下面我們就來看看如何使用pprof進(jìn)行檢測和修復(fù)Go語言中的內(nèi)存泄漏吧2025-01-01
Golang因Channel未關(guān)閉導(dǎo)致內(nèi)存泄漏的解決方案詳解
這篇文章主要為大家詳細(xì)介紹了當(dāng)Golang因Channel未關(guān)閉導(dǎo)致內(nèi)存泄漏時蓋如何解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-07-07

