在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
可以方便地實現高效并發處理任務,它簡化了并發編程的復雜性,并提供了一種優雅的方式來等待所有任務完成。