我正在用golang写一个低延迟的网络,高吞吐量的服务器。它在主goroutine中具有接受器(接受传入连接)。并将传入的连接传递给'n'个工作程序goroutine。
在这种情况下,为了不断开连接,我希望将接收器goroutine优先于其他goroutine,以便不会断开连接。或者,至少该接受者goroutine不应被其他工人goroutine驱逐。
如何确保这一点?
答案 0 :(得分:1)
如果您将接受连接的优先级高于“完成工作”,请考虑一段时间后会发生什么。您将创建工作积压,同时接受越来越多的连接,从而完成更多工作。这只会使服务器上的负载更高。
相反,请专注于高效地编写工作程序代码,以便快速完成工作,从而腾出资源来处理新连接。
如果您担心服务器无法处理工作负载,则应考虑限制客户端的速率。
答案 1 :(得分:0)
我在golang上创建了线程池。这样一来,一个人就可以轻松地将某些goroutine优先于其他goroutine。