所以我知道 goroutine 的开销很低,但我想知道它们有多好。如果我有一个处理传入消息的服务器,与使用带有通道的标准生产者/消费者模型相比,创建一个新的 go 例程来处理每个传入消息如何?就像拥有一个高性能的 go 服务器来为任何传入的请求生成新的 go 例程是合理的。
2 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
我们实际上是在用类似的方法进行压力测试。我们为每个 http 请求生成了新线程。并发性非常好,在 10 秒内我们就达到了 100,000 个请求。您可能面临的唯一瓶颈是内存,因为如果所有处理都不够快,那么您可能会用完该进程的内存。
我很确定有一个解决方法,但这就是为什么你想要限制而不产生无限的 go 例程的原因之一。我们面临的问题是我们试图从另一个 API 获取数据,而该 API 无法跟上这种并发水平。因此,之前的节流建议。
幕布斯7119047
TA贡献1794条经验 获得超8个赞
内置http
包对每个连接使用一个 goroutine,并且有许多基准测试表明它能够处理数千个并发用户。因此,除非您有很多连接,每个连接都有很多消息,否则我会说为每条消息创建一个新的 goroutine 是合理的。无论如何,Go 有一个很好的基准测试功能,您可以使用它来验证您的假设。
https://golang.org/src/net/http/server.go#L2137
- 2 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消