Java 中的 BIO、NIO 和 AIO 可以理解為是 Java 語(yǔ)言對(duì)操作系統(tǒng)的各種 IO 模型的封裝培己。在使用這些 API 的時(shí)候碳蛋,不需要關(guān)心操作系統(tǒng)層面的知識(shí),也不需要根據(jù)不同操作系統(tǒng)編寫不同的代碼省咨,只需要使用 Java 的 API 就可以了肃弟。
在講 BIO,NIO,AIO 之前,先來(lái)回顧一下這樣幾個(gè)概念:同步與異步,阻塞與非阻塞笤受。
同步與異步
同步: 同步就是發(fā)起一個(gè)調(diào)用后穷缤,被調(diào)用者未處理完請(qǐng)求之前,調(diào)用不返回箩兽;
異步: 異步就是發(fā)起一個(gè)調(diào)用后津肛,立刻得到被調(diào)用者的回應(yīng),表示已接收到請(qǐng)求汗贫,但是被調(diào)用者并沒(méi)有返回結(jié)果身坐,此時(shí)我們可以處理其他的請(qǐng)求,被調(diào)用者通常依靠事件落包、回調(diào)等機(jī)制來(lái)通知調(diào)用者其返回結(jié)果部蛇。
同步和異步的最大區(qū)別,在于異步的話調(diào)用者不需要等待處理結(jié)果咐蝇,被調(diào)用者會(huì)通過(guò)回調(diào)等機(jī)制來(lái)通知調(diào)用者其返回結(jié)果涯鲁。
阻塞和非阻塞
阻塞: 阻塞就是發(fā)起一個(gè)請(qǐng)求,調(diào)用者一直等待請(qǐng)求結(jié)果返回有序,也就是當(dāng)前線程會(huì)被掛起抹腿,無(wú)法從事其他任務(wù),只有當(dāng)條件就緒時(shí)才能繼續(xù);
非阻塞: 非阻塞就是發(fā)起一個(gè)請(qǐng)求旭寿,調(diào)用者不用一直等著結(jié)果返回幢踏,可以先去干其他的事情。
舉個(gè)生活中簡(jiǎn)單的例子:
你媽媽讓你燒水许师,小時(shí)候你比較笨啊,在那里傻等著水開(kāi)(同步阻塞)僚匆;
等你稍微長(zhǎng)大了微渠,你知道每次燒水的空隙可以去干點(diǎn)其他事,然后只需要時(shí)不時(shí)來(lái)看看水開(kāi)了沒(méi)有(同步非阻塞)咧擂;
再后來(lái)逞盆,你們家用上了水開(kāi)了會(huì)發(fā)出聲音的壺,這樣你只需要聽(tīng)到響聲后松申,就知道水開(kāi)了云芦,在這期間你可以隨便干自己的事情,最后才需要去倒水了(異步非阻塞)贸桶。