在Golang中,任務的并發(fā)執(zhí)行可以通過goroutine和channel來實現(xiàn)。Goroutine是輕量級的線程,可以并發(fā)執(zhí)行多個任務。Channel用于在不同的goroutine之間進行通信和數(shù)據(jù)傳遞。
首先,我們可以使用go關(guān)鍵字啟動一個goroutine來并發(fā)執(zhí)行一個函數(shù)。例如:
func main() {
go myFunc() // 啟動一個goroutine并發(fā)執(zhí)行myFunc函數(shù)
// 其他的代碼
}
func myFunc() {
// 執(zhí)行任務的邏輯
}
如果我們有多個任務需要并發(fā)執(zhí)行,但是又需要等待它們?nèi)客瓿珊笤倮^續(xù)執(zhí)行后續(xù)的代碼,可以使用sync.WaitGroup來實現(xiàn)。WaitGroup是一個計數(shù)器,用于等待一組goroutine的完成。
import "sync"
func main() {
var wg sync.WaitGroup
wg.Add(2) // 設(shè)置需要等待的goroutine數(shù)量
go myFunc1(&wg) // 啟動goroutine并發(fā)執(zhí)行myFunc1函數(shù)
go myFunc2(&wg) // 啟動goroutine并發(fā)執(zhí)行myFunc2函數(shù)
wg.Wait() // 等待所有g(shù)oroutine完成
// 所有任務完成后繼續(xù)執(zhí)行后續(xù)的代碼
}
func myFunc1(wg *sync.WaitGroup) {
defer wg.Done() // 任務完成時通知WaitGroup計數(shù)器減1
// 執(zhí)行任務1的邏輯
}
func myFunc2(wg *sync.WaitGroup) {
defer wg.Done() // 任務完成時通知WaitGroup計數(shù)器減1
// 執(zhí)行任務2的邏輯
}
在每個任務的最后,我們使用defer關(guān)鍵字來調(diào)用wg.Done()
,通知WaitGroup計數(shù)器減1。當計數(shù)器歸零時,Wait方法就會返回,程序繼續(xù)執(zhí)行后續(xù)的代碼。
通過使用goroutine和WaitGroup,我們可以實現(xiàn)任務的并發(fā)執(zhí)行和等待。這樣可以充分利用多核處理器的并行計算能力,提高程序的執(zhí)行效率。