golang 限制携程数量
时间: 2023-07-16 14:15:44 浏览: 57
在 Golang 中,可以使用 GOMAXPROCS 环境变量来限制并发 Goroutine 的数量。这个环境变量指定了可以同时执行的最大操作系统线程数。如果要限制 Goroutine 的数量,则需要将这个值设置为所需的最大 Goroutine 数量。
另外,可以使用 sync 包中的 WaitGroup 来实现 Goroutine 的同步和控制。WaitGroup 可以用来等待一组 Goroutine 执行完毕后再继续执行下一步操作。
以下是一个示例代码,演示如何限制 Goroutine 的数量:
```go
package main
import (
"fmt"
"sync"
)
func main() {
maxGoroutines := 5
wg := sync.WaitGroup{}
sem := make(chan struct{}, maxGoroutines)
// 启动100个Goroutine
for i := 0; i < 100; i++ {
wg.Add(1)
sem <- struct{}{} // 获取信号量
go func(i int) {
defer func() {
<-sem // 释放信号量
wg.Done()
}()
fmt.Printf("Goroutine %d\n", i)
}(i)
}
wg.Wait()
}
```
在这个示例中,我们使用了一个带缓冲的 channel 来实现信号量。这个 channel 的缓冲区大小为 maxGoroutines,也就是说,最多只能有 maxGoroutines 个 Goroutine 同时执行。当一个 Goroutine 启动时,它会先获取一个信号量,当它执行完毕后,再释放这个信号量,以便其他 Goroutine 可以获取它并开始执行。
在这个示例中,我们限制了 Goroutine 的数量为 5。如果要修改数量,只需要修改 maxGoroutines 的值即可。