为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据文件描述符的数量限制 go 例程

如何根据文件描述符的数量限制 go 例程

Go
芜湖不芜 2022-05-18 09:49:51
我有一个对 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 数量的通道。一旦工作完成,您可以读取通道值以减少计数。


上面的程序就像一个粗略的示例代码..(我认为它涵盖了一般想法)


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信