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