为了账号安全,请及时绑定邮箱和手机立即绑定

Java的NIO是同步非阻塞,但为什么其核心的Selector.select()是阻塞的?

Java的NIO是同步非阻塞,但为什么其核心的Selector.select()是阻塞的?

一只名叫tom的猫 2019-01-16 13:45:46
Java的NIO是同步非阻塞,但为什么其核心的Selector.select()是阻塞的?不矛盾吗? Selector selector = Selector.open(); while (true) { int nReady = selector.select(); // 这里会阻塞,哪里体现非阻塞? Set<SelectionKey> keys = selector.selectedKeys(); Iterator<SelectionKey> it = keys.iterator(); //... }
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

NIO 是同步非阻塞 这句话指的是对于一个IO来看,是同步非阻塞,非阻塞的意思是拥有这次IO的线程没有阻塞,而在NIO中实际上是一条线程拥有很多的IO,有任何一个IO有数据 ,selector就被唤醒,所以你可以这么想:在这条线程中,当IOA没有数据处于等待时,IOB可能正在被处理,所以这条线程并没有被这个IOA阻塞,
感觉你太纠结于阻塞非阻塞了,不用这么纠结在这方面。
还有NIO我觉得严格意义上来说应该是多路复用,而不是同步非阻塞

查看完整回答
2 反对 回复 2019-02-12
  • 2 回答
  • 0 关注
  • 2227 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信