91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

golang限制最大并發數的方法是什么

小億
128
2023-10-26 01:01:39
欄目: 編程語言

在Go語言中,可以使用sync.WaitGroupchan來限制最大并發數。

  1. 使用sync.WaitGroupsync.WaitGroup是一個計數器,用來等待一組goroutine完成任務。可以在每個goroutine開始執行前調用Add()方法增加計數器,然后在goroutine執行結束時調用Done()方法減少計數器,最后可以調用Wait()方法等待所有的goroutine完成。

以下是一個使用sync.WaitGroup限制最大并發數的示例代碼:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	// 設置最大并發數為3
	maxConcurrency := 3

	// 創建一個等待組
	var wg sync.WaitGroup

	// 創建一個通道用于控制最大并發數
	sem := make(chan struct{}, maxConcurrency)

	// 創建10個任務
	for i := 0; i < 10; i++ {
		wg.Add(1)

		// 將任務添加到通道中
		sem <- struct{}{}

		go func(i int) {
			// 執行任務
			fmt.Println("Task", i, "start")
			time.Sleep(time.Second)
			fmt.Println("Task", i, "done")

			// 任務完成后從通道中移除
			<-sem

			// 完成任務
			wg.Done()
		}(i)
	}

	// 等待所有任務完成
	wg.Wait()
}
  1. 使用chanchan是Go語言中的通道,可以用來進行goroutine之間的通信。通過創建一個指定緩沖大小的通道,可以限制最大并發數。

以下是一個使用chan限制最大并發數的示例代碼:

package main

import (
	"fmt"
	"time"
)

func main() {
	// 設置最大并發數為3
	maxConcurrency := 3

	// 創建一個通道用于控制最大并發數
	sem := make(chan struct{}, maxConcurrency)

	// 創建10個任務
	for i := 0; i < 10; i++ {
		// 將任務添加到通道中
		sem <- struct{}{}

		go func(i int) {
			// 執行任務
			fmt.Println("Task", i, "start")
			time.Sleep(time.Second)
			fmt.Println("Task", i, "done")

			// 任務完成后從通道中移除
			<-sem
		}(i)
	}

	// 等待所有任務完成
	for i := 0; i < maxConcurrency; i++ {
		sem <- struct{}{}
	}
}

這樣可以確保同一時間最多同時執行maxConcurrency個goroutine。

0
临海市| 辛集市| 思南县| 清水县| 亳州市| 南郑县| 黄石市| 明溪县| 霸州市| 古蔺县| 南京市| 余庆县| 白城市| 日土县| 屏边| 六盘水市| 吴桥县| 南安市| 沈丘县| 沧州市| 岳西县| 山东省| 开平市| 平舆县| 东平县| 蚌埠市| 乌兰察布市| 驻马店市| 银川市| 乌鲁木齐市| 游戏| 锡林郭勒盟| 四平市| 和硕县| 南召县| 沂南县| 吴桥县| 如皋市| 汉沽区| 安仁县| 新竹市|