控制并发 goroutine 数量的方法:使用通道(channel)限制并发 goroutine:创建具有固定缓冲区容量的通道,控制同时进入临界区的 goroutine 数量。

如何在 Golang 函数中控制并发 goroutine 的数量
在 Golang 中,goroutine 是并发执行的轻量级线程。虽然 Goroutine 非常高效,但在某些情况下,控制并发 goroutine 的数量至关重要。这样做可以提高应用程序的性能和稳定性。
使用通道(Channel)限制并发 goroutine
立即学习“go语言免费学习笔记(深入)”;
通道(Channel)是一种并发原语,可用于同步和通信。它可以在协程之间传递数据,并在必要时阻塞协程。要使用通道限制并发 goroutine 的数量,可以创建具有固定缓冲区容量的通道。例如:
package main
import (
"fmt"
"sync"
)
func main() {
// 创建一个容量为 2 的通道
ch := make(chan int, 2)
var wg sync.WaitGroup
wg.Add(4)
// 启动并发 goroutine
for i := 0; i < 4; i++ {
go func(i int) {
defer wg.Done()
// 将 goroutine 的 ID 发送到通道
ch <- i
fmt.Printf("goroutine %d 进入临界区\n", i)
// 从通道接收数据,模拟临界区
<-ch
fmt.Printf("goroutine %d 离开临界区\n", i)
}(i)
}
// 等待所有 goroutine 完成
wg.Wait()
}实战案例
此代码限制并发 goroutine 执行临界区中的任务的数量为 2。 goroutine 执行以下任务:
- 发送 ID 到通道,表示进入临界区
- 从通道接收数据,表示离开临界区










