Tomcat源码番外篇:Selector 、SelectionKey、NIO补充

本篇笔记的目的是:补充Selector基础不够牢固的问题
Selector 选择器 分析

Selector

  • 键集
  1. 键集
  2. 已选择键集
  3. 已取消键集
    通过关闭某个键的通道或者是调用该键的 cancel 方法来取消键,取消的键将被添加到已取消键集中。已取消键集中的键,在下一次“选择”(select())操作期间将注销该键的通道,而在注销时该键将从所有选择器的键集(键集、已选择键集、已取消键集)中移除该键。
   protected HashSet keys;//“键集” 与选择器关联的key集合  
   protected Set selectedKeys;//“已选择键集”就绪key集合,即已经操作事件准备就绪的选择key  
   private Set publicKeys;//外部访问key集合的代理  
   private Set publicSelectedKeys;//外部访问就绪key集合代理 
   private Set<SelectionKey> cancelledKeys ;已取消键集
  • SelectorImpl类中的select()
    在这里插入图片描述
    lockAndDoSelect 方法 调用的是 WindowsSelectorImpl 的 doSelect(),这里不做深究。处理流程在
    开头引入的笔记中有讲
    在这里插入图片描述

register注册流程(本篇重点)

  • SelectionKey类中包含了什么
    在这里插入图片描述
    在这里插入图片描述
    ==》 SelectionKey 中包含 socketchannel、attachment和interestOps 信息
  • Selector的实现类SelectorImpl 的register()
    在这里插入图片描述
    第一个方框 创建SelectionKey对象
    第二个方法 将SelectionKey对象 注册到Selector中,即保存到keys中(一个Set 集合)
  • 结:
    得到SelectionKey,就可以得到其中包含的SocketChannel 和attachment
    attachment 其实是为了方便开发者扩展的。
    Tomcat源码中的KeyAttachment 就是其扩展之一,目的是为SelectionKey绑定 更多的信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值