首页 文章

JBoss Netty和UDP:多线程?

提问于
浏览
1

我用Netty编写了一个简单的UDP服务器 . 服务器侦听某个接口上的一个端口 .

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入站通道适配器),并且有一个线程侦听端口,但是这个线程将传入的消息传递给其他线程一个游泳池 .

谢谢

2 回答

  • 1

    您的计算机上有多少个核心?

    如果您的处理程序管道没有进行任何阻塞或任何冗长的处理,那么I / O处理很可能总是比网络快得多,即IO线程将处于空闲状态并等待相当大的工作它的时间 . 无需从池中分配另一个线程 .

    另一方面,如果您的处理程序涉及冗长的处理或阻止调用,例如数据库或文件访问,然后您应该将处理交给ExecutionHandler,即将处理从IO工作池传输到另一个线程池 .

  • 1

    我建议你用java.nio使用Reactor模式 - 看看this -

相关问题