Netty的簡介、BIO NIO AIO和Reactor模型

✅Netty簡介

Netty是由JBOSS提供的一個Java開源框架
Netty提供異步的 基於事件驅動的網絡應用程序框架和工具 用於快速開發高性能 高可靠性的網絡服務器和客戶端程序
也就是說 Netty是一個基於NIO的客戶端和服務器端編程框架
使用Netty可以快速簡單開發出一個網絡應用 例如實現了某種協議的客戶端和服務端應用
相當於 Netty是簡化了網絡應用的編程開發過程

特點

  • Netty提供了簡單易用的API
  • 基於事件驅動的編程方式來編寫網絡通信程序
  • 支持更好的吞吐量

✅BIO、NIO、AIO

BIO:

同步阻塞IO( Block IO)
IO操作時會阻塞線程 併發處理能力低
一個Socket連接一個處理線程(該線程負責該Socket連接的一系列數據傳輸操作)
由於操作系統允許的線程數量是有限的 因此多個Socket申請與服務端建立連接時 服務端不能提供相應數量的處理線程
因此未被分配到處理線程的連接就會阻塞或被拒絕

NIO:

同步非阻塞IO(None-Block IO)
NIO是對BIO的改進 基於Reactor模型
一個Socket連接只有在特定時候纔會發生數據傳輸的IO操作 大部分時候數據通道都是空閒的 但還佔用着線程
因此 NIO所做的改進就是一個請求一個線程 在連接到服務端的衆多Socket中 只有需要進行IO操作的才能獲取到服務端的處理線程進行IO操作
這樣 就不會因爲線程不夠用而限制了Socket的接入了

AIO:

異步非阻塞IO(Async None-Block IO)
由操作系統先完成了客戶端請求的處理 然後再通知服務器去啓動線程進行處理
也被稱爲NIO2.0 在JDK7後開始支持

✅Netty的Reactor模型

Reactor模型 分爲單線程模型 多線程模型 和 主從多線程模型

單線程模型

用戶發起IO請求到Reactor線程 然後Reactor線程將用戶的IO請求放入通道 然後進行後續處理
當處理完成後 Reactor線程重新獲得控制權 然後繼續進行其它客戶端的處理

缺點

  • 1、單線程的Reactor模型 每個用戶時間都在一個線程中執行
  • 2、性能有極限
  • 3、當負荷到達一定程度 性能會下降
  • 4、某個事件處理器發生故障時 無法繼續處理其它的事件

多線程模型

一組NIO線程來處理IO操作 任務可以同時執行
在請求處理上效率會更高 可以處理更多的客戶端請求

主從多線程模式

(Netty推薦使用該線程模型)
適用於高併發場景 一組線程池接收請求 一組線程池處理IO
在這裏插入圖片描述


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