我有一个对 HTTP 服务器执行查询的程序,每个请求都有一个 goroutine。我很快发现这对于 MacOS 来说太多了,因为文件描述符限制为 250。我想知道是否可以限制 goroutine 的数量,或者在有可用的 goroutine 之前阻塞,而不是失败。也许是一个有 250 个 goroutines 的工作池,并将其余的请求排队?你怎么认为
1 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
package main
import "fmt"
const ROUTINE_LIMIT = 250
func main() {
channelCounter := make(chan bool, ROUTINE_LIMIT)
for {
select {
//will add till 250 after that it will block
case channelCounter <- true:
fmt.Println("added channel")
go startRoutine(channelCounter)
}
}
}
func startRoutine(channelCounter chan bool) {
/*
do your stuff
*/
//free the channel
<-channelCounter
}
您可以使用通道限制您的 goruotine 计数。一个用于记录运行的 goroutine 数量的通道。一旦工作完成,您可以读取通道值以减少计数。
上面的程序就像一个粗略的示例代码..(我认为它涵盖了一般想法)
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报
0/150
提交
取消