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我觉得严格意义上来说应该是多路复用,而不是同步非阻塞
添加回答
举报
0/150
提交
取消