美文网首页
Tomcat源码番外篇:Selector 、SelectionK

Tomcat源码番外篇:Selector 、SelectionK

作者: sunpengshujun | 来源:发表于2019-12-16 00:42 被阅读0次

    @[toc]
    本篇笔记的目的是:补充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> 集合)
    • 结:
      得到SelectionKey,就可以得到其中包含的SocketChannel 和attachment
      attachment 其实是为了方便开发者扩展的。
      Tomcat源码中的KeyAttachment 就是其扩展之一,目的是为SelectionKey绑定 更多的信息

    相关文章

      网友评论

          本文标题:Tomcat源码番外篇:Selector 、SelectionK

          本文链接:https://www.haomeiwen.com/subject/jaqrnctx.html