golang的go例程开销

时间:2016-06-22 03:03:26

标签: go

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

如果有一个高性能的服务器为新的传入请求产生新的例程,那就更合理了。

2 个答案:

答案 0 :(得分:3)

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

我非常确定有一个解决方法,但这就是为什么你想要限制并产生无限制的惯例的一个原因。我们遇到的问题是我们试图从另一个API中获取数据,而这些API无法跟上这种并发水平。因此,早些时候的限制建议。

答案 1 :(得分:2)

内置的http软件包为每个连接使用goroutine,并且有许多基准测试表明它能够处理数千个并发用户。因此,除非你有许多与每个消息有很多联系,否则我认为为每条消息创建一个新的goroutine是合理的。无论如何,go有一个很好的benchmarking feature可以用来验证你的假设。

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