Netty 源码阅读入门实战(四)-NioEventLoop
2018-07-14 本文已影响11人
紫霞等了至尊宝五百年
1 NioEventLoop概述
-
总述
2 NioEventLoop创建概述
对应
对应
对应
对应
3 ThreadPerTaskThread
2 服务端Channel的创建
bind 对应样例的
跟进调试
通过反射创建的 channel
看看 channelFactory
-
反射创建服务端 Channel
首先
创建完毕了
-
ANC
4 创建NioEventLoop线程
5 创建线程选择器
-
先看看普通的
-
再看幂2的
循环取数组索引下标,& 比取模性能更高
6 NioEventLoop的启动
对应是
对应是
7 NioEventLoop执行概述
8 检测IO事件
对应的源码为
对应的源码为
执行至此,说明已进行了一次阻塞式的 select 操作
产生空轮询的判断
当空轮询次数大于阈值
阈值定义
阈值
避免空轮询的再次发生
创建新选择器
获取旧选择器的所有 key 值
netty 包装的 channel
将之前的 key 事件解除,并绑定新的选择器和对应的事件
更新选择器的 key
至此,解决了空轮bug
9 处理IO事件
原生JDK创建一个 selector