我使用 Netty 编写了一个简单的 UDP 服务器。服务器监听某个接口(interface)上的一个端口。
ChannelFactory factory =
new NioDatagramChannelFactory(
Executors.newCachedThreadPool());
ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);
bootstrap.getPipeline().addLast("MyHandler", new TestHandler());
bootstrap.bind(new InetSocketAddress(InetAddress.getByName("192.168.1.100"), 8080));
我使用的客户端会向服务器发送大量 UDP 数据报。当我使用 VisualVM 分析我的应用程序时,我发现只有一个线程(名为 New I/O Worker #1)处理传入消息。是不是如预期的那样?
如果是,单个线程如何处理大量传入消息?我已经编写了一个使用 Spring 集成的应用程序,该应用程序监听端口上的 UDP 数据报(使用 UDP 入站 channel 适配器),并且有一个线程监听该端口,但该线程将传入消息传递给其他线程进行处理。一个游泳池。
谢谢
最佳答案
您的机器上有多少个内核?
如果您的处理程序管道不执行任何阻塞或任何冗长的处理,则 I/O 处理很可能始终比网络快得多,即 IO 线程将处于空闲状态并等待工作其大部分时间。无需从池中分配另一个线程。
另一方面,如果您的处理程序涉及冗长的处理或阻塞调用,例如数据库或文件访问,那么您应该将处理交给 ExecutionHandler,它将处理从 IO 工作池转移到另一个线程池。
关于java - JBoss Netty 和 UDP : multithread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118106/