首先,我们先纵览一下EventLoopGroup 的类结构图,如下图所示:
在前面的章节中我们已经简单地介绍了一下NioEventLoopGroup 初始化的基本过程,这里我们再回顾一下时序图:
基本步骤如下:
1、EventLoopGroup(其实是MultithreadEventExecutorGroup)内部维护一个类为EventExecutor children 数组,其大小是nThreads,这样就初始化了一个线程池。
2、如果我们在实例化NioEventLoopGroup 时,如果指定线程池大小,则nThreads 就是指定的值,否则是CPU核数* 2。
3、在MultithreadEventExecutorGroup 中会调用newChild()抽象方法来初始化children 数组.
4、抽象方法newChild()实际是在NioEventLoopGroup 中实现的,由它返回一个NioEventLoop 实例。
5、初始化NioEventLoop 主要属性:
provider:在NioEventLoopGroup 构造器中通过SelectorProvider 的provider()方法获取SelectorProvider。
selector:在NioEventLoop 构造器中调用selector = provider.openSelector()方法获取Selector 对象。