1. 程式人生 > >一句話讓你瞭解NIO和IO的異同

一句話讓你瞭解NIO和IO的異同

下面的解析摘自網友的回答:


Channel 通道

Buffer 緩衝區

Selector 選擇器

其中Channel對應以前的流,Buffer不是什麼新東西,Selector是因為nio可以使用非同步的非堵塞模式才加入的東西。

以前的流總是堵塞的,一個執行緒只要對它進行操作,其它操作就會被堵塞,也就相當於水管沒有閥門,你伸手接水的時候,不管水到了沒有,你就都只能耗在接水(流)上。

nio的Channel的加入,相當於增加了水龍頭(有閥門),雖然一個時刻也只能接一個水管的水,但依賴輪換策略,在水量不大的時候,各個水管裡流出來的水,都可以得到妥善接納,這個關鍵之處就是增加了一個接水工,也就是Selector,他負責協調,也就是看哪根水管有水了的話,在當前水管的水接到一定程度的時候,就切換一下:臨時關上當前水龍頭,試著開啟另一個水龍頭(看看有沒有水)。



當其他人需要用水的時候,不是直接去接水,而是事前提了一個水桶給接水工,這個水桶就是Buffer。也就是,其他人雖然也可能要等,但不會在現場等,而是回家等,可以做其它事去,水接滿了,接水工會通知他們。

這其實也是非常接近當前社會分工細化的現實,也是統分利用現有資源達到併發效果的一種很經濟的手段,而不是動不動就來個並行處理,雖然那樣是最簡單的,但也是最浪費資源的方式。

通過以上通俗的解釋,你應該對NIO有個大概的瞭解,如果想要系統的學習一下NIO,可以參考這篇部落格:

http://www.iteye.com/magazines/132-Java-NIO#589