亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

Golang并發編程:利用Go WaitGroup實現任務隊列

小云
130
2023-10-08 11:34:28
欄目: 編程語言

Go語言的WaitGroup是用來等待一組goroutine執行完畢的工具,可以用來實現任務隊列。下面是一個使用WaitGroup實現任務隊列的示例代碼:

package main
import (
"fmt"
"sync"
)
func main() {
// 創建一個WaitGroup
var wg sync.WaitGroup
// 創建一個帶緩沖的任務隊列
queue := make(chan string, 10)
// 啟動三個goroutine來處理任務
for i := 0; i < 3; i++ {
// 增加WaitGroup的計數
wg.Add(1)
// 啟動一個goroutine來處理任務
go worker(i, queue, &wg)
}
// 向任務隊列中添加任務
for i := 0; i < 10; i++ {
queue <- fmt.Sprintf("Task %d", i)
}
// 關閉任務隊列
close(queue)
// 等待所有goroutine執行完畢
wg.Wait()
}
func worker(id int, queue chan string, wg *sync.WaitGroup) {
// 在函數退出時,減少WaitGroup的計數
defer wg.Done()
// 不斷從任務隊列中獲取任務,并處理任務
for task := range queue {
fmt.Printf("Worker %d processing task: %s\n", id, task)
}
}

上面的代碼中,首先創建了一個WaitGroup和一個帶緩沖的任務隊列。然后啟動了三個goroutine來處理任務。每個goroutine都會從任務隊列中獲取任務并處理。最后,通過調用Wait方法等待所有goroutine執行完畢。

在主函數中,通過循環向任務隊列中添加任務,并在添加完畢后關閉任務隊列。這樣所有的goroutine就會在任務隊列為空時退出,并通過調用Done方法減少WaitGroup的計數。

需要注意的是,在worker函數中,通過defer關鍵字來調用Done方法,以保證在函數退出時一定會調用Done方法。這樣可以避免在處理任務過程中發生異常導致WaitGroup計數無法減少的問題。

通過上述代碼,可以實現利用Go WaitGroup實現任務隊列的功能。每個任務會被分配給可用的goroutine進行處理,從而實現并發執行。

0
绿春县| 婺源县| 高州市| 杨浦区| 灌云县| 廊坊市| 姚安县| 垫江县| 镇赉县| 达拉特旗| 甘德县| 新邵县| 无锡市| 沂源县| 禄丰县| 内丘县| 五常市| 广昌县| 浮梁县| 孝感市| 永仁县| 九寨沟县| 墨玉县| 广西| 贡嘎县| 武威市| 五峰| 安龙县| 勃利县| 紫阳县| 保山市| 宁乡县| 磐安县| 盐津县| 南和县| 蕲春县| 广宗县| 内乡县| 兴海县| 清水河县| 衡山县|