同步與異步,阻塞和非阻塞

Java 中的 BIO、NIO 和 AIO 可以理解為是 Java 語言對(duì)操作系統(tǒng)的各種 IO 模型的封裝。在使用這些 API 的時(shí)候,不需要關(guān)心操作系統(tǒng)層面的知識(shí),也不需要根據(jù)不同操作系統(tǒng)編寫不同的代碼,只需要使用 Java 的 API 就可以了。

在講 BIO,NIO,AIO 之前,先來回顧一下這樣幾個(gè)概念:同步與異步,阻塞與非阻塞。

同步與異步

同步: 同步就是發(fā)起一個(gè)調(diào)用后,被調(diào)用者未處理完請(qǐng)求之前,調(diào)用不返回;
異步: 異步就是發(fā)起一個(gè)調(diào)用后,立刻得到被調(diào)用者的回應(yīng),表示已接收到請(qǐng)求,但是被調(diào)用者并沒有返回結(jié)果,此時(shí)我們可以處理其他的請(qǐng)求,被調(diào)用者通常依靠事件、回調(diào)等機(jī)制來通知調(diào)用者其返回結(jié)果。

同步和異步的最大區(qū)別,在于異步的話調(diào)用者不需要等待處理結(jié)果,被調(diào)用者會(huì)通過回調(diào)等機(jī)制來通知調(diào)用者其返回結(jié)果。

阻塞和非阻塞

阻塞: 阻塞就是發(fā)起一個(gè)請(qǐng)求,調(diào)用者一直等待請(qǐng)求結(jié)果返回,也就是當(dāng)前線程會(huì)被掛起,無法從事其他任務(wù),只有當(dāng)條件就緒時(shí)才能繼續(xù);
非阻塞: 非阻塞就是發(fā)起一個(gè)請(qǐng)求,調(diào)用者不用一直等著結(jié)果返回,可以先去干其他的事情。

舉個(gè)生活中簡(jiǎn)單的例子:

你媽媽讓你燒水,小時(shí)候你比較笨啊,在那里傻等著水開(同步阻塞);
等你稍微長(zhǎng)大了,你知道每次燒水的空隙可以去干點(diǎn)其他事,然后只需要時(shí)不時(shí)來看看水開了沒有(同步非阻塞);
再后來,你們家用上了水開了會(huì)發(fā)出聲音的壺,這樣你只需要聽到響聲后,就知道水開了,在這期間你可以隨便干自己的事情,最后才需要去倒水了(異步非阻塞)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容