gpt4 book ai didi

java - Netty客户端只使用一个线程

转载 作者:行者123 更新时间:2023-12-02 06:33:05 24 4
gpt4 key购买 nike

我正在 TCP/IP 之上实现一个二进制协议(protocol),并使用 Netty 来实现这一点。我的问题是性能相当差(600 条消息/秒)。我作为客户端仅通过一个连接连接到服务器。当我调查使用 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 的非阻塞版本("new"I/O)允许您使用单个线程进行多个连接,因为线程在读/写时不会阻塞(因此得名)操作。阻塞 I/O 需要每个连接都有一个线程,因为阻塞会阻止您处理不同连接之间的流量。

这使您能够执行更有效的通信,因为您不再有线程开销。

有一个不错的教程可用 here (原来的Oracle教程似乎已经从Google的脸上消失了)。

关于java - Netty客户端只使用一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com