1. 程式人生 > >Netty執行緒模型之客戶端執行緒模型

Netty執行緒模型之客戶端執行緒模型

相比於服務端,客戶端的執行緒模型簡單一些,它的工作原理如下:


第一步:由使用者執行緒發起客戶端連線,示例程式碼如下:

客戶端只需要建立一個EventLoopGroup,因為它不需要獨立的執行緒去監聽客戶端連線,也沒有必要通過一個單獨的客戶端執行緒去連線服務端。Netty執行緒是非同步事件驅動的NIO框架,它的連線和所有IO操作都是非同步的,因此不需要建立單獨的連線執行緒。相關程式碼如下:


當前的group()就是之前傳入的EventGroup,從中獲取可用的IO執行緒EventLoop,然後作為引數設定到新建立的NioSocketChannel中。

第二步:發起連線操作,判斷結果,程式碼如下:

判斷連線結果,如果沒有連線成功,則監聽連線網路操作位

SelectionKey.OP_CONNECT。如果連線成功,則呼叫pipeline().fireChannelActive()將監聽位修改為READ.

第三步:由NioEventLoop的多路複用器輪詢連線操作結果,程式碼如下:


----判斷連線操作結果


---設定操作位為READ

第四步:由NioEventLoop執行緒負責IO讀寫,同步服務端。

總結:客戶端建立,執行緒模型如下:

1.由使用者執行緒負責初始化客戶端資源,發起連線操作;

2.如果連線成功,將SocketChannel註冊到IO執行緒組的NioEventLoop執行緒中,監聽讀操作位;

3.如果沒有立即連線成功,將SocketChannel

註冊到IO執行緒組的NioEventLoop執行緒中,監聽連線操作位;

4.連線成功後,修改監聽位位READ,但是不需要切換執行緒。