1. 程式人生 > >【Java IO】IO的發展史之BIO、NIO、AIO

【Java IO】IO的發展史之BIO、NIO、AIO

       任何事物的發展都是由不完善到更好的方向發展的,至於能不能發展到完善,我這裡可以負責任的說:是不能的,因為隨著時代的發展,任何過去時的研究成功不能總滿足當下或將來的狀況。這就像我們碼農的 命運一樣,昨天我們學習了Struts、hibernate等技術,幾年後被Spring mvc、mybatis取代的時候,我們還要趕緊學習這些框架,誰也不知道明天會不會有個新的框架出來再取而代之。只有不斷學習才不會被這個時代拋棄。

        IO的發展也類似,起初(jdk1.4之前)IO提供了位元組流和字元流,但設計都是執行緒阻塞的,效率非常低下,jdk1.4開始對IO進行了改革,推出了同步非阻塞IO, 提供了 Channel、Selector、Buffer新的抽象,讀寫效率

得到了提高。2011年,jdk1.7釋出,AIO的出現,標誌著IO的操作又進入一個新階段。

        BIO(Blocking I/O):同步阻塞IO模式,資料讀取或寫入必須阻塞在一個執行緒內完成。 【以下摘自知乎:在此種方式下,使用者程序在發起一個 IO 操作以後,必須等待 IO 操作的完成,只有當真正完成了 IO 操作以後,使用者程序才能執行。

        NIO(New I/O):支援同步阻塞和非阻塞IO模式。同步非阻塞:【以下摘自知乎: 在此種方式下,使用者程序發起一個 IO 操作以後 邊可 返回做其它事情,但是使用者程序需要時不時的詢問 IO 操作是否就緒,這就要求使用者程序不停的去詢問,從而引入不必要的 CPU 資源浪費。

        AIO( Asynchronous I/O ): 非同步非阻塞I/O模型(知乎中有人說java實現的不是非同步非阻塞,而是非同步阻塞,這裡需要進一步考證)。 非同步 IO 是基於事件和回撥機制實現的,也就是應用操作之後會直接返回,不會阻塞在那裡,當後臺處理完成,作業系統會通知相應的執行緒進行後續的操作。

由於今天時間的問題,先整理這部分內容。後序會用例項說明每一種模