1. 程式人生 > >阻塞與非阻塞,同步與非同步

阻塞與非阻塞,同步與非同步

Java的IO有三種:IO、NIO、AIO

第一種是Java剛開始就出現的IO即BIO(同步阻塞IO),我們一般常說的IO就是這種IO,這種IO相對來說比較簡單,基於流模型,提供一種IO操作。互動方式是同步、阻塞,呼叫的順序是線性順序,這種IO有一個好處就是,程式碼簡單,但是缺點就是IO的效率較低、擴充套件性不好。

在Java1.4後,出現了NIO(同步非阻塞IO),提供了Channel、Buffer、Selector等新的抽象。可以構建多路複用的同步非阻塞IO。

在Java1.7後,出現了NIO2即AIO,引入了非同步非阻塞的IO,基於事件和回撥機制。

同步與非同步的區別:

同步是一種可靠的有序執行機制,當我們在進行同步操作的時候,後續的任務等待當前任務的返回,才能進行下一步。而非同步則不同,其他的任務不用等待當前任務的返回,依靠事件與回撥機制來實現任務的次序關係。

阻塞與非阻塞的區別:

當執行緒處於阻塞狀態時,無法從事其他任務,只有當條件準備就緒才可以。而非阻塞狀態不管IO是否結束,直接返回。