如何根据文件描述符的数量限制go例程
How to limit go routines based on number of file descriptors
我有一个向 HTTP 服务器执行查询的程序,每个请求都有一个 goroutine。
我很快发现它对于 MacOS 来说太多了,因为文件描述符限制为 250。
我想知道我是否可以限制 goroutine 的数量,或者阻止直到有可用的 goroutine,而不是失败。
也许有 250 个 goroutines 的工作池,并将其余请求排队?
你有什么想法
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 数量。
一个记录 go 例程数量的通道 运行 ..
工作完成后,您可以读取通道值以减少计数。
上面的程序就像一个粗略的示例代码..(我认为它涵盖了总体思路)
我有一个向 HTTP 服务器执行查询的程序,每个请求都有一个 goroutine。 我很快发现它对于 MacOS 来说太多了,因为文件描述符限制为 250。
我想知道我是否可以限制 goroutine 的数量,或者阻止直到有可用的 goroutine,而不是失败。
也许有 250 个 goroutines 的工作池,并将其余请求排队?
你有什么想法
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 数量。 一个记录 go 例程数量的通道 运行 .. 工作完成后,您可以读取通道值以减少计数。
上面的程序就像一个粗略的示例代码..(我认为它涵盖了总体思路)