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

golang 中的 goroutine 的开销

golang 中的 goroutine 的开销

Go
噜噜哒 2022-01-17 20:04:51
所以我知道 goroutine 的开销很低,但我想知道它们有多好。如果我有一个处理传入消息的服务器,与使用带有通道的标准生产者/消费者模型相比,创建一个新的 go 例程来处理每个传入消息如何?就像拥有一个高性能的 go 服务器来为任何传入的请求生成新的 go 例程是合理的。
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

我们实际上是在用类似的方法进行压力测试。我们为每个 http 请求生成了新线程。并发性非常好,在 10 秒内我们就达到了 100,000 个请求。您可能面临的唯一瓶颈是内存,因为如果所有处理都不够快,那么您可能会用完该进程的内存。

我很确定有一个解决方法,但这就是为什么你想要限制而不产生无限的 go 例程的原因之一。我们面临的问题是我们试图从另一个 API 获取数据,而该 API 无法跟上这种并发水平。因此,之前的节流建议。


查看完整回答
反对 回复 2022-01-17
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

内置http包对每个连接使用一个 goroutine,并且有许多基准测试表明它能够处理数千个并发用户。因此,除非您有很多连接,每个连接都有很多消息,否则我会说为每条消息创建一个新的 goroutine 是合理的。无论如何,Go 有一个很好的基准测试功能,您可以使用它来验证您的假设。

https://golang.org/src/net/http/server.go#L2137


查看完整回答
反对 回复 2022-01-17
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

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