2012-09-29 56 views
1

上下文是Netty 3.5.x.Netty - NioWorker池和工作線程池之間的關係

創建NioServerSocketChannelFactoryNioClientSocketChannelFactory時,NioWorker的數量與工作線程池中的線程數之間的關係是什麼? Netty的設計是否規定線程池中可用的線程數至少爲NioWorkers?如果線程池中的線程數少於NioWorker s,會發生什麼情況?

回答

0

是的關係是1:1。所以你至少需要和NioWorkers一樣多的線程。如果你創建SocketChannelFactory的時候,它會拋出一個「掛起」異常,這取決於Executor的實現。

+0

謝謝你的回答。根據我的經驗,如果線程池中的線程數少於'NioWorker'的數量,客戶端或服務器有時無法長時間完成連接請求(在內部,老闆線程提交的註冊任務似乎永遠不會拿起)。我不知道Netty是否允許創建'ChannelFactory'對象,其中線程池中的最大線程數小於'NioWorker'的數量。 – atuladhar

+0

目前,如果您使用僅包含2個執行程序的構造函數(例如'NioClientSocketChannelFactory(Executor,Executor)'),那麼很容易犯這個錯誤。默認情況下,Netty會創建兩倍於NioWorker的數目,如果工作者執行者不能提供至少那麼多的線程,你會得到間歇性的連接失敗。另外,如果關聯是真正的1:1,這可能是值得在JavaDoc中明確表達的東西。 – atuladhar