NIO相关问题

来源:10-9 NIO服务器

红邮筒

2018-12-13

1、老师,按照你前面讲的原理,我觉得selector一次只选择0个或1个key,那么为什么selectedKeys方法的结果用set数组表示?仅仅是为了方便用iterator吗?
2、key等于OP_ACCEPT时register函数注册的selector和key等于OP_READ时register函数注册的selector是否是同一个?
3、而且从代码来看,if(key.isAcceptable())和if (key.isReadable())代码块里的channel还不是一个channel,有点不懂

写回答

1回答

ccmouse

2018-12-13

第一个问题,你的理解是对的,但不是为了方便。这个设计的确比较怪,是为了和几十年历史的unix select函数的行为保持一些一致。
对于2和3。这是同一个selector,但是挂了很多channel。一个用来accept新的链接,然后每个链接又有对应的op_read的channel注册在selector里面。
主循环阻塞住,然后有新的链接,或者有新的数据,都会造成对应的key被select,然后进行对应的操作。

2
3
红邮筒
非常感谢!
2018-12-17
共3条回复

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程