Netty学习系列-EventLoop
Posted 程序Caribbean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty学习系列-EventLoop相关的知识,希望对你有一定的参考价值。
前言
这篇文章是Netty学习系列的第三篇文章,从上面一篇文章我们了解到NioEventLoop是Netty处理事件的核心机制。具体的我将本篇文章分为四个大的方面,NioEventLoop创建、NioEventLoop启动、NioEventLoop执行逻辑和NioEventLoop的总结。
一 NioEventLoop的创建
在创建NioEventLoop时首先会创建一个线程执行器,这个线程执行器的作用就是创建一个NioEventLoop对应底层的一个线程,然后会用一个for循环创建一个EventLoop数组,然后再创建每一个EventLoop的时候时调用一个 newChild() 方法,给NioEventLoop配置属性,在最后会创建一个选择器给每个新连接分配一个 NioEventLoop,具体的相关函数调用可以看下图:
还记得我们在第一篇文章的例子程序中服务端启动的时候,传入了两个EventLoopGroup如下:
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
由上面的代码可知,我们是在这里创建的NioEventLoop,我们跟进去看看他的构造函数,源码如下:
/**
* NioEventLoopGroup.java 36行起
*/
public class NioEventLoopGroup extends MultithreadEventLoopGroup {
/**
* Create a new instance using the default number of threads, the default {@link ThreadFactory} and
* the {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}.
*/
public NioEventLoopGroup() {
this(0);
}
/**
* Create a new instance using the specified number of threads, {@link ThreadFactory} and the
* {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}.
*/
public NioEventLoopGroup(int nThreads) {
this(nThreads, (Executor) null);
}
......
}
可以从这里知道,无参构造函数会自动给我们设置一个0,而去调用有参够着函数,这里我们继续跟下去看看他们的内部逻辑到底是怎样创建的,其实到最后他会调用到父类MultithreadEventLoopGroup的构造函数,具体源码如下:
以上是关于Netty学习系列-EventLoop的主要内容,如果未能解决你的问题,请参考以下文章