【问题标题】:How to constrain Go's grpc go routine number如何约束Go的grpc goroutine数
【发布时间】:2018-07-01 20:14:48
【问题描述】:

无论如何我可以限制 grpc 客户端中的 goroutine 的数量吗?我有一个使用 grpc 客户端的 go 应用程序,我发现有相当多的 go 例程正在创建并不断增长。 感谢您的帮助。

【问题讨论】:

  • gRPC 在 goroutine 中启动每个请求。如果传入 rpc 请求的数量增加,goroutines 也会增加。我建议你看看你的 rpc 函数,以尽量减少延迟。
  • 这听起来像是一个 XY 问题。为什么要关心 goroutine 的数量?您的实际问题是什么?
  • 实际问题是正如 vedhavyas 所描述的,gRPC 为每个请求启动一个新的 goroutine。当延迟很高时,我的 goroutine 数量就会不断增加。我想真正的问题在于 rpc 调用本身的延迟。只是出于好奇,我想知道 C++ gRPC 客户端的行为是什么。它有某种线程池吗?

标签: go client grpc


【解决方案1】:

如果你的问题是如何限制 grpc goroutines,没有办法,但我怀疑限制 goroutine 数量有什么意义。如果你达到了你的极限并且另一个请求来了怎么办?

您可以在处理程序的开头使用类似信号量的模式,这样您就可以限制 N 个并发请求。额外的请求将等待其他请求完成后再开始处理(但有更多的 N 个 goroutine,只有 N 个在工作)。

Here 是使用通道的信号量实现。

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2017-07-09
    • 1970-01-01
    • 2018-09-18
    • 2021-07-11
    • 2023-01-20
    相关资源
    最近更新 更多