【发布时间】:2013-11-11 22:04:07
【问题描述】:
我在 TCP/IP 之上实现了一个二进制协议,并使用 Netty 来实现这一点。我的问题是性能相当差(600 msg/s)。我作为客户端连接到仅具有一个连接的服务器。当我使用 JTop 调查运行实例时,我看到 Netty 正在大量使用 1 个工作线程,而其他 5 个工作线程什么也没做(0% 使用率)。我在网上挖掘,我发现的只是提到了 ExecutionHandler。但是,如果这 6 个工作线程就足够了,我为什么要使用它。还是我误解了 Netty 是如何使用这些线程的?
我的 Netty 初始化代码:
this.channelFactory = new NioClientSocketChannelFactory(this.executors, DaemonExecutors.newCachedDaemonThreadPool(), 1, 6);
this.clientBootstrap = new ClientBootstrap(channelFactory);
this.channelGroupHandler = new ClientChannelGroupHandler(this.channels);
this.clientBootstrap.getPipeline().addLast("ChannelGroupHandler", this.channelGroupHandler);
感谢任何提示 马图斯
【问题讨论】:
-
您是说您使用单个客户端连接到服务器吗?那么为什么服务器会使用其他线程,你知道每个客户端一个线程。
-
我正在实现一个客户端,它现在只连接一个连接,将来会有更多。我认为使用 NIO 的全部意义在于一个连接可以由多个线程提供服务?
-
你完全错了。 NIO 允许您使用单个线程来服务多个连接。
-
啊哈,我从未真正深入了解 NIO,感谢您指出这一点。你有什么好的资源可供我阅读吗?关于线程?无论如何,这解释了我在 Netty 中看到的行为。谢谢!我能以某种方式接受 cmets 吗?