我尝试优化UDP服务器以处理更多吞吐量,它基于Java IO数据报套接字(不是NIO)。 当该UDP服务器收到UDP数据包时,需要处理该数据包,并将处理后的数据发送到后台资源,然后响应客户端。 目前,该服务器将为每个要处理的传入数据包分配一个线程。
我读了一些文章,我明白了 对于某些情况,例如,基于TCP的聊天服务器: 需要同时管理数千个开放连接,每个只发送一些数据,在NIO中实现服务器可能是一个优势。 很少有线程可以处理大量连接(Thread Per Request),因为只有少数连接在给定时间点向服务器发送请求。因此,我们不需要为每个连接维护一个线程。 这是使用Java TCP NIO的一个巨大优势。
而在UDP中,每个数据包(数据报)实际上都是一个自包含的消息,每个数据包都可以被视为一个请求,即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程。
那么,使用NIO数据报通道有什么好处?
答案 0 :(得分:1)
即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程
为什么呢?如果你是一个回声服务器,一个时间服务器,那就不是......这完全取决于你正在做什么。
如果您的应用程序是clietns继续请求(而不是一次性请求:例如时间或DNS),那么您可能会考虑每个客户端的线程而不是每个请求。< / p>
你的假设不值得仔细审查。
然而 NIO已经超卖并且大多数应用程序都不需要它。有些服务器在阻塞模式下支持成千上万的连接。