select在一些什么情况下会返回0,一些什么情况下会阻塞
来源:7-10 NIO服务器Thread优化-4
PerryMore
2020-12-27
以下图片中的注释是发送一条消息时,被打印出来的日志。
网上很多资料说,当selectionKeys的size为0时,会导致select()方法阻塞,但上面的注释好像推翻了这一点。
为什么“ddd”消息发送后,readSelector.select()方法没有阻塞住,而且返回为0。
所以select方法何时返回0,何时被阻塞?
写回答
1回答
-
Qiujuer
2020-12-28
select() 不管是否有key都会被阻塞,至于返回0,有几种常见情况:
线程意外中断返回时,此时可能无就绪任务所以为0
当有新的事件需要注册时,需要对selector进行唤醒操作,唤醒操作会导致强制返回,此时若无就绪任务则也是0
select可以指定超时时间,超时时也会返回,若无就绪任务也是0
所以其根本在于是否有就绪的任务。
022021-01-05
相似问题