netty源码分析8-NioEventLoop-IO事件,IO任务

本文分享内容如下:processSelectedKeysOptimized分析 IO事件执行分析processSelectedKeysOptimized分析private void processSelectedKeysOptimized(SelectionKey[] selectedKeys) {for (int i = 0;; i ++) {final SelectionK...
摘要由CSDN通过智能技术生成

分享内容如下

  1. IO事件执行
    1. processSelectedKeysOptimized分析
    2. needsToSelectAgain分析
    3. processSelectedKey分析
  2. NioEventLoop父子类分析
  3. IO任务和定时任务

IO事件执行

processSelectedKeysOptimized分析

private void processSelectedKeysOptimized(SelectionKey[] selectedKeys) {

for (int i = 0;; i ++) {

final SelectionKey k = selectedKeys[i];

if (k == null) {

break;

}

 

final Object a = k.attachment();

 

if (a instanceof AbstractNioChannel) {//普通IO事件

processSelectedKey(k, (AbstractNioChannel) a);

} else {//执行NioTask

@SuppressWarnings("unchecked")

NioTask<SelectableChannel> task = (NioTask<SelectableChannel>) a;

processSelectedKey(k, task);

}

 

if (needsToSelectAgain) {

selectAgain();

// Need to flip the optimized selectedKeys to get the right reference to the array

// and reset the index to -1 which will then set to 0 on the for loop

// to start over again.

//

// See https://github.com/netty/netty/issues/1523

selectedKeys = this.selectedKeys.flip();

i = -1;

}

}

}

NioTask接口用于自定义 channel已经准备好 和channel关闭处理逻辑, 只在netty 源码的测试类中找到

关联了SelectionKey.OP_CONNECT。

needsToSelectAgain分析

这个值默认为false,在 NioEventLoop-cancel()中修改为false

void cancel(SelectionKey key) {

key.cancel();

cancelledKeys ++;

if (cancelledKeys >= CLEANUP_INTERVAL) {//CLEANUP_INTERVAL默认为256 不可以配置

cancelledKeys = 0;

needsToSelectAgain = true;

}

}

看一下cannel什么时候被调用

 

分析得知 当底层IO处理,如connect,register,bind,read 发生异常都会触发cannel方法。

needsToSelectAgain 在processSelectedKeysOptimized执行过程中 执行了256次cancel,则执行</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值