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

溫馨提示×

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
马边| 京山县| 天长市| 上饶县| 栖霞市| 平邑县| 新密市| 科技| 荆州市| 明星| 西城区| 辰溪县| 丽江市| 临泉县| 清水县| 霍邱县| 临夏市| 河西区| 方山县| 邹城市| 海门市| 临澧县| 万源市| 东莞市| 江油市| 双牌县| 东至县| 页游| 镇雄县| 乐都县| 江北区| 剑河县| 大悟县| 界首市| 千阳县| 潮安县| 海淀区| 磐石市| 嘉峪关市| 本溪市| 随州市|