當我們討論Netty線程模型的時候,一般首先會想到的是經(jīng)典的Reactor線程模型,盡管不同的NIO框架對于Reactor模式的實現(xiàn)存在差異,但本質(zhì)上還是遵循了Reactor的基礎線程模型。下面淺談一下我對Reactor線程模型的認識
1.Reactor單線程模型,是指所有的I/O操作都在同一個NIO線程上面完成。NIO線程的職責如下
作為NIO服務端,接收客戶端的TCP連接
作為NIO客戶端,向服務端發(fā)起TCP連接
讀取通信對端的請求或者應答消息
向通信對端發(fā)送消息請求或者應答消息
對于小容量的應用可以用單線程,但是對于高負載、大并發(fā)的應用不適用,因為性能上無法支撐
2.Rector多線程模型與單線程模型大的區(qū)別就是有一組NIO線程來處理I/O操作,特點如下:
有專門一個NIO線程---Acceptor線程用于監(jiān)聽服務端,接收客戶端的TCP連接請求
網(wǎng)絡I/O操作--讀、寫等由一個NIO線程池負責,線程池可以采用標準的JDK線程池實現(xiàn)
一個NIO線程可以同時處理N條鏈路,但是一個鏈路只對應一個NIO線程,防止發(fā)生并發(fā)操作
大多數(shù)情況下,用多線程模型就可以滿足性能需求,但是如果一個NIO線程負責監(jiān)聽和處理大量連接也有可能會存在性能問題。
3.主從Reactor多線程模型
服務端用于接收客戶端連接的不在是一個單獨的NIO線程,而是一個獨立的NIO線程池。Acceptor接收到客戶端TCP連接請求并處理完成后(可能包含介入認證等),將新創(chuàng)建的SocketChannel注冊到I/O線程池的某個I/O線程上,由它負責SocketChannel的讀寫和編解碼工作,可以解決一個服務端監(jiān)聽線程性能不足的問題,因此Netty的官方demo中,推薦使用該線程模型
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。