JAVA NIO(知識一)


java nio基本上常用的組件,selector,channel,buffer。這三個,其他的可以用到的時候再去參考就可以了。


看一本書的時候,基本看前三章或者四章基礎知識,剩下的,實際生產中用到了再去看就可以。


大白話解釋這三個重要的單詞

Channel:

Java的nio中,channel其實是用於傳輸的,也可以說是管道,是一個工具,可以對比一下io中的流,很類似。但是io中的流都是單向的,但是channel通道是雙向的,就是這個通道里既可以讀,也可以往裏面寫。這個channel跟buffer打交道是比較多的,再用nio的時候,讀取數據是channel把數據讀取到buffer,然後應用再從buffer中讀取數據。寫數據則是應用程序先把數據寫入到buffer中,然後chanel把數據寫入到io設備中,就是這樣的交互過程


buffer:

buffer常用作解釋成緩衝區,再介紹channel的時候,說過數據都是在緩衝區中的,讀取數據的是把數據先讀到buffer中,然後再從buffer中讀數據。nio中的庫都是這麼操作數據的,並不是再channel中讀寫數據。緩衝區中有三個重要的狀態:position,limit,capacity,再接下來的篇幅中介紹,這裏就不多介紹了。


selector

常用作解釋成選擇器,我把它解釋成監聽器,用來監聽一個或者多個通道,通道可以把自己感興趣的操作註冊到selector上,比如read,write,connect,accept,然後selector負責監聽。它是用單線程來處理這些操作的,單線程有單線程的好處,好處就是可以避免多線程之間的線程切換,這樣開會會很大。基本一句話說明這個selector是用來管理多個通道的。


下面說說JAVA NIO的io模型,看過java nio都知道都說NIO是異步非阻塞io。


阻塞&非阻塞:

java io是阻塞IO,當你發起一個IO讀取數據請求的時候,如果有數據還好可以讀,沒有數據IO會一直阻塞那裏,而NIO則相反,如果沒有數據可讀就返回,告訴用戶線程當前沒有數據。


同步&異步:

同步IO發起IO操作的時候會一直等待操作完成,這種操作是同步的。異步IO則是發起IO操作,如果當前沒有符合的操作,則返回。


重點:多路複用io模型

其實java nio就是採用多路複用io模型的,NIO中的seletor就是單線程監聽註冊的channel是否有就緒事件發生,一個線程管理多個channel,只有真正有讀寫事件發生的時候纔會觸發操作。多路複用是採用輪訓的方式來檢測事件是否到達,並對事件追憶進行處理,如果請求的事件比較多,一個線程監聽還是有弊端的,處理不過來,會導致新來的事件擱置或者停留達不到快速響應。


JAVA NIO Selector 知識三 http://shangdc.blog.51cto.com/10093778/1956602


JAVA NIO buffer (知識三)

http://shangdc.blog.51cto.com/10093778/1956602


JAVA NIO 之 channel通道(知識二)

http://shangdc.blog.51cto.com/10093778/1955874


JAVA NIO 知識一

http://shangdc.blog.51cto.com/10093778/1955793


歡迎老司機指正,提出更好的講述和見解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章