Netty為什么放棄使用AIO


前言

為什么Netty使用NIO,而不使用AIO

NIO和AIO的區別

NIO模型(同步非阻塞)

NIO有同步阻塞和同步非阻塞兩種模式,一般講的是同步非阻塞,服務器實現模式為一個請求一個線程,但客戶端發送的連接請求都會注冊到一個多路復用器上,多路利用器輪詢到連接有I/O請求時才啟動一個線程進行處理。

AIO模型 (異步非阻塞)

服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理。

然后看下Netty作者在這個問題上的原話
Not faster than NIO(epoll) on unix systems (which is true) 譯:在UNIX系統上不比NIO快
There is no daragream support 譯:不支持數據報
Unnecessary threading model(too much abstraction without usage) 譯:不必要的線程模型

所以我們可以總結出以下幾點:

  • 在LINUX系統上,AIO底層實現仍使用Epoll,沒有很好的實現AIO,因此性能上沒有明顯優勢,而且被JDK封裝了一層不容易優化
  • Netty整體架構是基本reactor模型,而aio是proactor模型,混合在一起會比較混亂
  • aio還有個缺點是接收數據需要預先分配緩沖區,而不是NIO那種需要接收時才需要分配緩存,所以對連接數量非常大但流量小的情況,內存浪費很多
  • linux上aio不夠成熟,處理回調的結果速度跟不到處理需求,供不應求,造成處理速度有瓶頸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM