任務(wù)調(diào)度器是一種常見的并發(fā)編程模式,它用于同時(shí)執(zhí)行多個(gè)任務(wù)并等待所有任務(wù)完成后再繼續(xù)執(zhí)行其他操作。在Golang中,可以使用sync.WaitGroup
實(shí)現(xiàn)任務(wù)調(diào)度器。
sync.WaitGroup
是Golang提供的一個(gè)并發(fā)原語(yǔ),用于等待一組goroutine完成。它提供了三個(gè)方法:Add()
、Done()
和Wait()
。
下面是一個(gè)使用sync.WaitGroup
實(shí)現(xiàn)任務(wù)調(diào)度器的示例代碼:
package main
import (
"fmt"
"sync"
)
func main() {
// 創(chuàng)建一個(gè)WaitGroup對(duì)象
var wg sync.WaitGroup
// 設(shè)置任務(wù)的數(shù)量
numTasks := 10
wg.Add(numTasks)
// 并發(fā)執(zhí)行任務(wù)
for i := 0; i < numTasks; i++ {
go func(taskId int) {
// 執(zhí)行任務(wù)
fmt.Printf("Task %d is running\n", taskId)
// 標(biāo)記任務(wù)完成
wg.Done()
}(i)
}
// 等待所有任務(wù)完成
wg.Wait()
// 所有任務(wù)完成后執(zhí)行其他操作
fmt.Println("All tasks have been completed")
}
在上面的代碼中,首先創(chuàng)建了一個(gè)sync.WaitGroup
對(duì)象。然后,通過(guò)調(diào)用Add()
方法設(shè)置了要執(zhí)行的任務(wù)數(shù)量。接下來(lái),通過(guò)循環(huán)并發(fā)執(zhí)行任務(wù),并在每個(gè)任務(wù)完成時(shí)調(diào)用Done()
方法標(biāo)記任務(wù)完成。最后,調(diào)用Wait()
方法等待所有任務(wù)完成。
運(yùn)行上述代碼,將會(huì)輸出類似以下內(nèi)容:
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
可以看到,所有任務(wù)完成后,程序繼續(xù)執(zhí)行其他操作。
使用sync.WaitGroup
實(shí)現(xiàn)任務(wù)調(diào)度器可以方便地管理多個(gè)并發(fā)任務(wù),并等待它們?nèi)客瓿?。這對(duì)于實(shí)現(xiàn)并行計(jì)算、批量處理等場(chǎng)景非常有用。