共計 931 個字符,預計需要花費 3 分鐘才能閱讀完成。
在 Go 語言中,可以使用 sync
包中的 WaitGroup
類型來實現高效并發處理任務。WaitGroup
是一個計數信號量,用于等待一組 goroutine 完成任務。它提供了三個方法:Add()
、Done()
和 Wait()
。
下面是一個使用 WaitGroup
實現高效并發處理任務的示例代碼:
package main
import (
"fmt"
"sync"
)
func main() {
numTasks := 10
var wg sync.WaitGroup
for i := 0; i < numTasks; i++ {wg.Add(1)
go func(taskID int) {defer wg.Done()
processTask(taskID)
}(i)
}
wg.Wait()
fmt.Println("All tasks completed")
}
func processTask(taskID int) {fmt.Printf("Task %d started\n", taskID)
// 模擬耗時操作
for i := 0; i < 100000000; i++ {
}
fmt.Printf("Task %d completed\n", taskID)
}
在這個示例中,我們創建了 10 個任務,并把它們放入一個 WaitGroup
中。在每個任務的 goroutine 中,我們調用 Done()
方法來標記任務完成。
最后,在 main
函數中調用 Wait()
方法等待所有任務完成。一旦所有任務完成,我們就可以繼續執行后續的代碼。
通過使用 WaitGroup
,我們可以高效地并發處理任務,而不需要手動管理 goroutine 的狀態。當所有任務都完成時,我們可以繼續執行后續的代碼。
請注意,當使用 WaitGroup
時,確保在每個任務的 goroutine 中調用 Done()
方法,以便正確地減少計數器。否則,Wait()
方法將一直阻塞,導致程序無法繼續執行。
此外,WaitGroup
的計數器也可以通過 Add()
方法增加,以便在其他地方動態添加任務。同樣,Done()
方法也可以在其他地方調用,以便在不同的位置標記任務完成。
總結起來,使用 Go WaitGroup
可以方便地實現高效并發處理任務,它簡化了并發編程的復雜性,并提供了一種優雅的方式來等待所有任務完成。
丸趣 TV 網 – 提供最優質的資源集合!