共計 756 個字符,預計需要花費 2 分鐘才能閱讀完成。
Go 語言控制并發數量的方法有以下幾種:
- 使用帶有緩沖的 channel:可以使用帶有緩沖的 channel 來限制并發數量。創建一個具有指定緩沖區大小的 channel,然后在并發的代碼中使用該 channel 來控制并發數量。
ch := make(chan struct{}, maxConcurrency)
for i := 0; i < totalTasks; i++ {ch <- struct{}{} // 占用一個 channel 的緩沖區
go func() {defer func() {<-ch}() // 釋放一個 channel 的緩沖區
// 執行并發任務
}()}
- 使用 sync.WaitGroup:可以使用 sync.WaitGroup 來等待并發任務完成。在并發的代碼中,每個任務開始前調用 Add 方法,任務結束后調用 Done 方法,然后在主 goroutine 中調用 Wait 方法等待所有任務完成。
var wg sync.WaitGroup
for i := 0; i < totalTasks; i++ {wg.Add(1)
go func() {defer wg.Done()
// 執行并發任務
}()}
wg.Wait()
- 使用有限制的 goroutine 池:可以創建一個有限數量的 goroutine 池,使用通道來控制任務的提交和執行。當有任務需要執行時,從通道中獲取一個 goroutine 并執行任務。
pool := make(chan struct{}, maxGoroutines)
for i := 0; i < maxGoroutines; i++ {pool <- struct{}{} // 占用一個 goroutine
go func() {defer func() {<-pool}() // 釋放一個 goroutine
// 執行并發任務
}()}
以上方法都可以用來控制并發數量,根據實際場景選擇合適的方法。
丸趣 TV 網 – 提供最優質的資源集合!
正文完