Java 设置NettyWorker池的正确大小

Java 设置NettyWorker池的正确大小,java,netty,Java,Netty,我正在使用Netty 3.7.0,并将ExecutionHandler(OMATPE)添加为ChannelPipeline中的第一个元素 Q1:通过此设置,将WorkerTool的大小设置为1应该是安全的,因为它只会创建ChannelDownstreamVentRunable,并将其添加到ExecutionHandler提供的执行器中。还是我在这里遗漏了什么 Q2:我还有一些解码器在管道中,因此解码工作由ExecutionHandler线程完成。这是一种“坏习惯”吗?即ExecutionHand

我正在使用Netty 3.7.0,并将ExecutionHandler(OMATPE)添加为ChannelPipeline中的第一个元素

Q1:通过此设置,将WorkerTool的大小设置为1应该是安全的,因为它只会创建ChannelDownstreamVentRunable,并将其添加到ExecutionHandler提供的执行器中。还是我在这里遗漏了什么


Q2:我还有一些解码器在管道中,因此解码工作由ExecutionHandler线程完成。这是一种“坏习惯”吗?即ExecutionHandler线程何时阻塞?但是ExecutionHandler的执行者的队列应该会增加,连接仍然可以由WorkerPool处理。

A1。是的,工作池中的线程只接受传入连接,池中的一个线程似乎就足够了。
A2。这取决于你的申请。如果您只是从通道中读取,那么阻塞执行器线程是安全的,并将用作流控制。但在某些情况下,阻塞读取进程将阻塞消息发送,并可能导致死锁。因此,通常情况下,由于Netty具有异步性质,因此不应阻止执行器线程(IMHO)

,但在某些情况下,阻止读取进程将阻止消息发送,并可能导致死锁。在我的例子中,消息也是由ExecutionHandler线程发送的,因此不应该存在争用或其他情况。如果设置maxTotalMemorySize Netty,则当值被破坏时,执行器会阻止I/O线程,而不是阻止所有通道读取。如果执行器线程阻塞等待写入完成,则可能会导致死锁。不要设置maxTotalMemorySize参数或不要阻止执行器线程我已将maxTotalMemorySize设置为0,因此执行器线程不应等待或阻止。