Java的NIO是同步非阻塞,但為什么其核心的Selector.select()是阻塞的?不矛盾嗎?
Selector selector = Selector.open();
while (true) {
int nReady = selector.select(); // 這里會(huì)阻塞,哪里體現(xiàn)非阻塞?
Set<SelectionKey> keys = selector.selectedKeys();
Iterator<SelectionKey> it = keys.iterator();
//...
}
2 回答

蕪湖不蕪
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
NIO 是同步非阻塞 這句話(huà)指的是對(duì)于一個(gè)IO來(lái)看,是同步非阻塞,非阻塞的意思是擁有這次IO的線(xiàn)程沒(méi)有阻塞,而在NIO中實(shí)際上是一條線(xiàn)程擁有很多的IO,有任何一個(gè)IO有數(shù)據(jù) ,selector就被喚醒,所以你可以這么想:在這條線(xiàn)程中,當(dāng)IOA沒(méi)有數(shù)據(jù)處于等待時(shí),IOB可能正在被處理,所以這條線(xiàn)程并沒(méi)有被這個(gè)IOA阻塞,
感覺(jué)你太糾結(jié)于阻塞非阻塞了,不用這么糾結(jié)在這方面。
還有NIO我覺(jué)得嚴(yán)格意義上來(lái)說(shuō)應(yīng)該是多路復(fù)用,而不是同步非阻塞
添加回答
舉報(bào)
0/150
提交
取消