类结构图
NioEventLoopGroup
NioEventLoop
初始化
线程池创建是通过MultithreadEventExecutorGroup构造函数,创建线程是通过DefaultThreadFactory
首先创建EventExecutor的数组
children = new EventExecutor[nThreads];
NioEventLoopGroup的newChild创建具体的eventloop即NioEventLoop
SingleThreadEventExecutor在重写了线程池的execute方法时,其会创建线程,执行SingleThreadEventExecutor.this.run()抽象方法
同时会初始化EventExecutorChooser, 有两种类型
- PowerOfTwoEventExecutorChooser
- GenericEventExecutorChooser
初始化SelectorProvider,默认使用sun.nio.ch.DefaultSelectorProvider.create()
public static SelectorProvider provider() {
synchronized (lock) {
if (provider != null)
return provider;
return AccessController.doPrivileged(
new PrivilegedAction<SelectorProvider>() {
public SelectorProvider run() {
if (loadProviderFromProperty())
return provider;
if (loadProviderAsService())
return provider;
provider = sun.nio.ch.DefaultSelectorProvider.create();
return provider;
}
});
}
}
初始化DefaultSelectStrategy,默认使用SelectStrategy.SELECT
创建NioEventLoop传递的executor参数为ThreadPerTaskExecutor
NioEventLoop
selector相关成员
private Selector selector;
private Selector unwrappedSelector;
private SelectedSelectionKeySet selectedKeys;
private final SelectorProvider provider;
selector初始化
this.provider = ObjectUtil.checkNotNull(selectorProvider, "selectorProvider");
this.selectStrategy = ObjectUtil.checkNotNull(strategy, "selectStrategy");
final SelectorTuple selectorTuple = openSelector();
this.selector = selectorTuple.selector;
this.unwrappedSelector = selectorTuple.unwrappedSelector;
1019

被折叠的 条评论
为什么被折叠?



