當我們討論Netty線程模型的時候,一般首先會想到的是經典的Reactor線程模型,盡管不同的NIO框架對于Reactor模式的實現存在差異,但本質上還是遵循了Reactor的基礎線程模型。下面淺談一下我對Reactor線程模型的認識
1.Reactor單線程模型,是指所有的I/O操作都在同一個NIO線程上面完成。NIO線程的職責如下
作為NIO服務端,接收客戶端的TCP連接
作為NIO客戶端,向服務端發起TCP連接
讀取通信對端的請求或者應答消息
向通信對端發送消息請求或者應答消息

對于小容量的應用可以用單線程,但是對于高負載、大并發的應用不適用,因為性能上無法支撐
2.Rector多線程模型與單線程模型最大的區別就是有一組NIO線程來處理I/O操作,特點如下:
有專門一個NIO線程---Acceptor線程用于監聽服務端,接收客戶端的TCP連接請求
網絡I/O操作--讀、寫等由一個NIO線程池負責,線程池可以采用標準的JDK線程池實現
一個NIO線程可以同時處理N條鏈路,但是一個鏈路只對應一個NIO線程,防止發生并發操作

大多數情況下,用多線程模型就可以滿足性能需求,但是如果一個NIO線程負責監聽和處理大量連接也有可能會存在性能問題。
3.主從Reactor多線程模型

服務端用于接收客戶端連接的不在是一個單獨的NIO線程,而是一個獨立的NIO線程池。Acceptor接收到客戶端TCP連接請求并處理完成后(可能包含介入認證等),將新創建的SocketChannel注冊到I/O線程池的某個I/O線程上,由它負責SocketChannel的讀寫和編解碼工作,可以解決一個服務端監聽線程性能不足的問題,因此Netty的官方demo中,推薦使用該線程模型
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。