中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
静海县| 多伦县| 巴东县| 安福县| 光山县| 阿尔山市| 博乐市| 昭平县| 南平市| 锡林浩特市| 闸北区| 固始县| 肥乡县| 乳山市| 马关县| 固原市| 吴川市| 东乡县| 安义县| 博白县| 河源市| 苏州市| 黄山市| 新龙县| 祥云县| 邵阳市| 射洪县| 神农架林区| 青河县| 华安县| 贺兰县| 襄垣县| 津南区| 湖口县| 铜梁县| 社旗县| 东乌珠穆沁旗| 峡江县| 永新县| 马龙县| 渝北区|