golang 中的 goroutine 的开销

所以我知道 goroutine 的开销很低,但我想知道它们有多好。如果我有一个处理传入消息的服务器,与使用带有通道的标准生产者/消费者模型相比,创建一个新的 go 例程来处理每个传入消息如何?

就像拥有一个高性能的 go 服务器来为任何传入的请求生成新的 go 例程是合理的。


噜噜哒
浏览 206回答 2
2回答

呼唤远方

我们实际上是在用类似的方法进行压力测试。我们为每个 http 请求生成了新线程。并发性非常好,在 10 秒内我们就达到了 100,000 个请求。您可能面临的唯一瓶颈是内存,因为如果所有处理都不够快,那么您可能会用完该进程的内存。我很确定有一个解决方法,但这就是为什么你想要限制而不产生无限的 go 例程的原因之一。我们面临的问题是我们试图从另一个 API 获取数据,而该 API 无法跟上这种并发水平。因此,之前的节流建议。

幕布斯7119047

内置http包对每个连接使用一个 goroutine,并且有许多基准测试表明它能够处理数千个并发用户。因此,除非您有很多连接,每个连接都有很多消息,否则我会说为每条消息创建一个新的 goroutine 是合理的。无论如何,Go 有一个很好的基准测试功能,您可以使用它来验证您的假设。https://golang.org/src/net/http/server.go#L2137
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go