任務調度器是一種常見的并發編程模式,它用于同時執行多個任務并等待所有任務完成后再繼續執行其他操作。在Golang中,可以使用sync.WaitGroup
實現任務調度器。
sync.WaitGroup
是Golang提供的一個并發原語,用于等待一組goroutine完成。它提供了三個方法:Add()
、Done()
和Wait()
。
下面是一個使用sync.WaitGroup
實現任務調度器的示例代碼:
package main
import (
"fmt"
"sync"
)
func main() {
// 創建一個WaitGroup對象
var wg sync.WaitGroup
// 設置任務的數量
numTasks := 10
wg.Add(numTasks)
// 并發執行任務
for i := 0; i < numTasks; i++ {
go func(taskId int) {
// 執行任務
fmt.Printf("Task %d is running\n", taskId)
// 標記任務完成
wg.Done()
}(i)
}
// 等待所有任務完成
wg.Wait()
// 所有任務完成后執行其他操作
fmt.Println("All tasks have been completed")
}
在上面的代碼中,首先創建了一個sync.WaitGroup
對象。然后,通過調用Add()
方法設置了要執行的任務數量。接下來,通過循環并發執行任務,并在每個任務完成時調用Done()
方法標記任務完成。最后,調用Wait()
方法等待所有任務完成。
運行上述代碼,將會輸出類似以下內容:
Task 0 is running
Task 1 is running
Task 2 is running
Task 3 is running
Task 4 is running
Task 5 is running
Task 6 is running
Task 7 is running
Task 8 is running
Task 9 is running
All tasks have been completed
可以看到,所有任務完成后,程序繼續執行其他操作。
使用sync.WaitGroup
實現任務調度器可以方便地管理多個并發任務,并等待它們全部完成。這對于實現并行計算、批量處理等場景非常有用。