2012-09-29 46 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