一、源码分析
NioEventLoopGroup是netty框架中非常重要的一个类,它实际上是一个EventLoopGroup实现类,用于创建并管理多个EventLoop线程对象,对外提供IO线程组的管理能力。
它的核心是NioEventLoop,继承自SingleThreadEventLoop,通过Selector轮询网络IO事件,实现异步非阻塞的网络通信。
下面是NioEventLoopGroup的简化源码:
public class NioEventLoopGroup extends MultithreadEventLoopGroup { // 构造函数中指定子线程数量 public NioEventLoopGroup(int nThreads) { super(nThreads, new DefaultThreadFactory(NioEventLoopGroup.class)); } // 重写MultithreadEventLoopGroup的next方法,采用轮询的方式返回下一个EventLoop对象 @Override public EventLoop next() { return super.next(); } // 重写MultithreadEventLoopGroup的newChild方法,创建一个NioEventLoop对象 @Override protected EventLoop newChild(Executor executor, Object... args) throws Exception { return new NioEventLoop(this, executor, (SelectorProvider) args[0], ((SelectStrategyFactory) args[1]).newSelectStrategy(), ((RejectedExecutionHandler) args[2])); } }
二、nioEventLoopGroup线程数设为1
将nioEventLoopGroup线程数设为1,即在构造函数中传入1即可,这意味着只有一个EventLoop线程在处理所有的IO事件。
使用单线程的优点是:
- 避免了多线程竞争的问题,简化了代码设计;
- 一定程度上防止了线程切换带来的性能消耗;
- 适用于业务处理逻辑非常简单,但请注意不要阻塞单线程。
下面是设置为1个线程的示例代码:
EventLoopGroup group = new NioEventLoopGroup(1);
三、nioEventLoopGroup线程数设为多少
将nioEventLoopGroup线程数设为多少,取决于网卡、CPU以及应用程序的实际情况。如果选择较小的线程数,对于连接较少的场景会有比较好的性能及资源占用情况;反之,如果连接数较多,建议增加线程数以处理所有连接的IO事件,减少处理事件的时间。
默认值是CPU核数乘以2,这是一个经验值,可以根据实际情况进行调整。
下面是设置为4个线程的示例代码:
int threads = 4; // 线程数 EventLoopGroup group = new NioEventLoopGroup(threads);
四、nioEventLoopGroup线程数CPU
通过Runtime类的availableProcessors()方法获取当前的CPU核数,这是一个比较好的默认值,可以做为nioEventLoopGroup线程数的推荐值。
下面是获取CPU核数的示例代码:
int threads = Runtime.getRuntime().availableProcessors(); // CPU核数 EventLoopGroup group = new NioEventLoopGroup(threads);
五、nioEventLoopGroup的pom包
如果你使用Maven构建项目,可以在pom.xml文件中引入以下代码:
<dependency> <groupId>io.netty</groupId> <artifactId>netty-transport</artifactId> <version>4.1.32.Final</version> </dependency>
六、nioEventLoopGroup freed
在Netty框架中,nioEventLoopGroup需要在程序退出时进行关闭(freed)以释放所有的资源,可以通过以下代码进行关闭操作:
group.shutdownGracefully();
七、总结
本文对NioEventLoopGroup进行了详细的分析和讲解,包括源码分析、设置线程数、使用CPU核数以及pom包引入等方面,这是一个非常重要的IO线程组管理类,在实际开发中需要根据实际情况进行选择和使用。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/256991.html