所以我理解,例程开销很低,但我想知道它们有多好。如果我有一个处理传入消息的服务器,那么与使用带有通道的标准生产者/消费者模型相比,如何创建处理每个传入消息的新例程?
如果有一个高性能的服务器为新的传入请求产生新的例程,那就更合理了。
答案 0 :(得分:3)
我们实际上是采用类似的方法进行压力测试。我们为每个http请求生成了新的线程。并发性比10秒内好,我们达到了100,000个请求。您可能面临的唯一瓶颈是记忆,因为如果所有处理都不够快,那么您可能会因为该过程而耗尽内存。
我非常确定有一个解决方法,但这就是为什么你想要限制并产生无限制的惯例的一个原因。我们遇到的问题是我们试图从另一个API中获取数据,而这些API无法跟上这种并发水平。因此,早些时候的限制建议。
答案 1 :(得分:2)
内置的http
软件包为每个连接使用goroutine,并且有许多基准测试表明它能够处理数千个并发用户。因此,除非你有许多与每个消息有很多联系,否则我认为为每条消息创建一个新的goroutine是合理的。无论如何,go有一个很好的benchmarking feature可以用来验证你的假设。