當前位置:編程學習大全網 - 編程語言 - netty 和 java nio 的區別

netty 和 java nio 的區別

Java NIO框架MINA用netty性能和鏈接數、並發等壓力測試參數好於mina。

NIO彌補了原來的I/O的不足,它再標準java代碼中提供了高速和面向塊的I/O

原力的I/O庫與NIO最重要的區別是數據打包和傳輸方式的不同,原來的I/O以流的方式處理數據,而NIO以塊的方式處理數據;

NIO以通道channel和緩沖區Buffer為基礎來實現面向塊的IO數據處理,MINA是開源的。

JavaNIO非堵塞應用通常適用用在I/O讀寫等方面,我們知道,系統運行的性能瓶頸通常在I/O讀寫,包括對端口和文件的操作上,過去,在打開壹個I/O通道後,read()將壹直等待在端口壹邊讀取字節內容,如果沒有內容進來,read()也是傻傻的等,這會影響我們程序繼續做其他事情,那麽改進做法就是開設線程,讓線程去等待,但是這樣做也是相當耗費資源的。

Java NIO非堵塞技術實際是采取Reactor模式,或者說是Observer模式為我們監察I/O端口,如果有內容進來,會自動通知我們,這樣,我們就不必開啟多個線程死等,從外界看,實現了流暢的I/O讀寫,不堵塞了。

Java NIO出現不只是壹個技術性能的提高,會發現網絡上到處在介紹它,因為它具有裏程碑意義,從JDK1.4開始,Java開始提高性能相關的功能,從而使得Java在底層或者並行分布式計算等操作上已經可以和C或Perl等語言並駕齊驅。

如果至今還是在懷疑Java的性能,說明思想和觀念已經完全落伍了,Java壹兩年就應該用新的名詞來定義。從JDK1.5開始又要提供關於線程、並發等新性能的支持,Java應用在遊戲等適時領域方面的機會已經成熟,Java在穩定自己中間件地位後,開始蠶食傳統C的領域。

原理:

NIO 有壹個主要的類Selector,這個類似壹個觀察者,只要我們把需要探知socketchannel告訴Selector,我們接著做別的事情,當有事件發生時,他會通知我們,傳回壹組SelectionKey,我們讀取這些Key,就會獲得我們剛剛註冊過的socketchannel,然後,我們從這個Channel中讀取數據,放心,包準能夠讀到,接著我們可以處理這些數據。Selector內部原理實際是在做壹個對所註冊的channel的輪詢訪問,不斷的輪詢(目前就這壹個算法),壹旦輪詢到壹個channel有所註冊的事情發生。比如數據來了,他就會站起來報告,交出壹把鑰匙,讓我們通過這把鑰匙來讀取這個channel的內容。在使用上,也在分兩個方向,壹個是線程處理,壹個是用非線程,後者比較簡單。

  • 上一篇:C++編程,clock置換算法
  • 下一篇:wow顯示倒計時怎麽設置
  • copyright 2024編程學習大全網