1. 程式人生 > >Java中NIO,BIO,AIO釋義

Java中NIO,BIO,AIO釋義

一、概念

        首先看下同步與非同步的區別:

同步:傳送一個請求,後臺立即處理,並返回處理結果。

非同步:傳送一個請求,不去管是否真正立即處理,可能返回的只是一個狀態值,真正的處理還並未完成。完成後非同步回撥通知或者定時去查詢結果

比如打電話,必須要對方接了之後,你才能和他進行溝通。是立即處理。但是發簡訊,你先發給對方,對方可能並沒有立即看,你還是可以多次發簡訊,等對方回了之後你再知道結果。

        再看下阻塞與非阻塞的解釋和區別:

阻塞:前一個沒有處理完成,後一個必須等待之前的完成,才能發起。

非阻塞:前一個不管有沒處理完成,後一個都可以同時處理。

比如你打算先去銀行辦理業務,再去飯店吃飯。阻塞的情況就是你去銀行需要站在那裡排隊,等排到你了,辦理完業務。再去吃飯,先點餐,做好了再吃。非阻塞的情景就是你去銀行,不用排隊,先叫好,可不用在哪等著,然後你去飯店先點餐叫號。然後再去銀行辦理業務,辦完後到飯店也可以直接吃飯了。

        這樣可以看到同步非同步和阻塞非阻塞它們的側重點是不同的。同步非同步的側重點在於後臺是否立即進行了正常的處理,得到了處理結果。阻塞非阻塞的側重點在於能否同時發起操作。

二、Java IO 

BIO:同步阻塞,jdk1.4 之前的唯一選擇,一個連線一個執行緒。

NIO:同步非阻塞,jdk1.4 後提出的,一個請求一個執行緒。

AIO(NIO 2.0):非同步非阻塞,jdk1.7 後提出,一個有效請求一個執行緒。

三、總結

上面的BIO,NIO,AIO分別適合不同場景的不同應用。

BIO:適用於連線數目比較少,且固定的架構。這種方式對伺服器的資源要求比較高。

NIO:適用於連線數多且連線較短(同步)的架構。比如聊天伺服器。

AIO:適用於連線數多且連線較長(非同步)的架構。比如相簿伺服器。