采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
以下图片中的注释是发送一条消息时,被打印出来的日志。
网上很多资料说,当selectionKeys的size为0时,会导致select()方法阻塞,但上面的注释好像推翻了这一点。
为什么“ddd”消息发送后,readSelector.select()方法没有阻塞住,而且返回为0。
所以select方法何时返回0,何时被阻塞?
select() 不管是否有key都会被阻塞,至于返回0,有几种常见情况:
线程意外中断返回时,此时可能无就绪任务所以为0
当有新的事件需要注册时,需要对selector进行唤醒操作,唤醒操作会导致强制返回,此时若无就绪任务则也是0
select可以指定超时时间,超时时也会返回,若无就绪任务也是0
所以其根本在于是否有就绪的任务。
那请问阻塞会在什么时机下发生呢?
调用select(),并且没有任何注册的事件就绪的时候。就会持续阻塞等待。
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
2.8k 1
1.8k 7
1.7k 5
1.9k 13
1.1k 13