NIO vs Netty

NIO vs Netty

跨平臺和兼容性

NIO依賴操作系統(tǒng)平臺底層IO系統(tǒng),Linux平臺上開發(fā)的功能可能在Windows平臺上并不奏效。除非將這些功能在所有的平臺上進(jìn)行測試,這無疑是很大的工作量。

NIO.2只在JDK7開始支持,在JDK6上并不能使用。JDK中并沒有提供在NIO.2-簡介中提到的對AsynchronousDatagramChannel(UDP)的支持,這樣我們就只能局限在TCP上。

是否選擇擴(kuò)展 ByteBuffer

我們并不能從ByteBuffer獲取一個(gè)ByteBuffer數(shù)組的擴(kuò)展,因?yàn)樗臉?gòu)造器并不對外開放。而在實(shí)際應(yīng)用中一個(gè)ByteBuffer數(shù)組能夠很大程度上減少內(nèi)存拷貝帶來的開銷。

分散和聚集可能引發(fā)內(nèi)存泄漏

在JDK6、JDK7中會印發(fā) OutOfMemoryError。

epoll bug

在類Linux系統(tǒng)上,選擇器使用了 epoll - IO事件通知功能.這是一個(gè)高性能的技術(shù),在網(wǎng)絡(luò)棧的異步工作的系統(tǒng)上.不幸地是,即使今天,"著名的" epoll-bug 可能導(dǎo)致在選擇器中"無效的"狀態(tài),導(dǎo)致了100%CPU使用和自旋.修復(fù)的唯一方式就是回收老的selector,然后將之前注冊的 Channel 實(shí)例傳給新創(chuàng)建的 Selector.

Selector.select() 會停止阻塞,直接返回,但是并沒有選擇人和的SelectorKey實(shí)例。這樣導(dǎo)致會有一個(gè)死循環(huán)吃掉你的CPU。


好吧,Netty都避免了上面的問題 大寫的NB

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JAVA NIO相對于Old IO APIs 有非常大的改進(jìn),但是使用NIO是受限制的。有些是設(shè)計(jì)問題,有些是缺陷...
    手上有磚閱讀 2,694評論 0 48
  • 作者: 一字馬胡 轉(zhuǎn)載標(biāo)志 【2017-11-24】 更新日志 一、Java OIO Java OIO (Jav...
    一字馬胡閱讀 1,458評論 0 12
  • 轉(zhuǎn)自 http://www.ibm.com/developerworks/cn/education/java/j-...
    抓兔子的貓閱讀 2,511評論 0 22
  • 1、Netty基礎(chǔ)入門 Netty是由JBOSS提供的一個(gè)java開源框架。Netty提供異步的、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)...
    我是嘻哈大哥閱讀 4,799評論 0 31
  • 誰沒有過青春。 還記得幼兒班,很快樂。去過很多游樂園和動物園,同時(shí)也去過很多地方旅游,可快樂總是那么的短暫...
    阿蔡_la閱讀 251評論 0 0

友情鏈接更多精彩內(nèi)容