java - JBoss Netty 和 UDP : multithread?

标签 java multithreading udp netty

我使用 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/

相关文章:

java正则表达式帮助

java - 线程 hibernate 直到收到另一个类的通知

java - Android Firebase : Save data to database

java - 一行有 3 个值的 ListView

python - 当您丢失对 Python 线程的所有引用时会发生什么?

multithreading - 在两个线程之间共享 Symbian 的 RFile

c - 如何关闭在recvfrom上阻塞的UDP套接字

sockets - 将 SO_LINGER 与 udp 套接字一起使用是否有效?

c++ - 从我不加入的组收到数据包

java - 时区同步