Netty-0x04-NioEventLoopGroup和NioEventLoop详细初始化过程
1 NioEventLoopGroup
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
java
1 |
|
一般而言,bossGroup和workerGroup的区别在于nThreads的指定
bossGroup手动显式指定1
workerGroup交给Netty进行推断,DEFAULT_EVENT_LOOP_THREADS
java1
DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
2 公共成员\方法\组件
2.1 SelectorProvider
SelectorProvider是java提供的类,屏蔽了OS的平台差异,对于我们用户而言,可以将其当成黑盒直接使用。
SelectorProvider::provider提供了一个多路复用器的具体实现。
2.1.1 提供器
java
1 |
|
2.1.2 创建Selector
java
1 |
|
2.2 SelectStrategyFactory
DefaultSelectStrategyFactory.INSTANCE
select策略,在Netty中NioEventLoop这个工作线程需要关注的事件包括了IO任务和普通任务,将来线程会阻塞在Selector多路复用器上,执行一次select调用怎么筛选IO任务普通任务。
java
1 |
|
2.3 RejectedExecutionHandlers
拒绝策略,taskQueue队列中任务满了直接上抛异常。
java
1 |
|
java
1 |
|
2.4 EventExecutorChooserFactory
线程选择器,从NioEventLoopGroup的children数组中选择一个NioEventLoop实例,达到负载均衡效果。
java
1 |
|
java
1 |
|
2.4.1 PowerOfTwoEventExecutorChooser
java
1 |
|
2.4.2 GenericEventExecutorChooser
java
1 |
|
2.5 ThreadPerTaskExecutor
用于执行NioEventLoop中taskQueue里面的任务。
java
1 |
|
2.6 newChild方法
主要就是用来实例化NioEventLoop。
java
1 |
|
3 NioEventLoop
3.1 创建队列实现MPSC
java
1 |
|
3.2 构造方法
java
1 |
|
java
1 |
|
java
1 |
|
4 组件示意图
Netty-0x04-NioEventLoopGroup和NioEventLoop详细初始化过程
https://bannirui.github.io/2023/05/15/Netty-0x04-NioEventLoopGroup和NioEventLoop详细初始化过程/