Golang并發(fā)編程:使用Go WaitGroup實(shí)現(xiàn)任務(wù)調(diào)度器

小云
89
2023-10-19 17:52:34

任務(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)景非常有用。

0