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

溫馨提示×

golang怎么限制協程數量

小億
160
2023-10-21 14:04:23
欄目: 編程語言

在Go語言中,可以使用信號量(Semaphore)來限制協程的數量。信號量是一種多線程同步的原語,用于控制對共享資源的訪問。

可以使用Go語言中的sync包中的Semaphore來實現信號量。sync包中提供了一個WaitGroup類型,可以用于等待一組協程完成。

下面是一個示例代碼,演示如何使用信號量限制協程數量:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, semaphore chan struct{}, wg *sync.WaitGroup) {
	// 從信號量中獲取一個許可
	semaphore <- struct{}{}

	// 執行工作
	fmt.Println("Worker", id, "start")
	// 模擬工作
	for i := 0; i < 5; i++ {
		fmt.Println("Worker", id, "working", i)
	}
	fmt.Println("Worker", id, "done")

	// 釋放許可,使其他協程可以獲取
	<-semaphore

	// 通知WaitGroup,當前協程已完成
	wg.Done()
}

func main() {
	const numWorkers = 3
	semaphore := make(chan struct{}, numWorkers) // 創建大小為numWorkers的信號量
	var wg sync.WaitGroup

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go worker(i, semaphore, &wg)
	}

	wg.Wait() // 等待所有協程完成
}

在上述代碼中,我們創建了一個大小為numWorkers的信號量semaphore,用于控制協程的數量。每個協程在開始執行工作前,先從信號量獲取一個許可,當工作完成后,釋放許可,使其他協程可以獲取。這樣就可以限制同時執行的協程數量為numWorkers

需要注意的是,semaphore通道的緩沖大小決定了同時執行的協程數量。在創建信號量時,可以根據實際需求選擇合適的緩沖大小。

0
嵊泗县| 濉溪县| 亚东县| 芮城县| 商都县| 灵璧县| 闸北区| 东源县| 贵州省| 丘北县| 扶沟县| 遵义县| 绵阳市| 古浪县| 南丰县| 全州县| 杭锦后旗| 德昌县| 定边县| 乌恰县| 库伦旗| 邵阳市| 揭阳市| 仪陇县| 新竹市| 桦甸市| 庆元县| 南宫市| 清水县| 昭平县| 平度市| 阿克陶县| 和林格尔县| 措美县| 濉溪县| 元朗区| 郧西县| 韩城市| 和平区| 博罗县| 九龙县|