Netty 4代码在线程池中运行阻塞操作

use*_*282 4 netty

该文档未提供有关可用的不同类型执行程序的任何详细信息.我想要的是拥有一个基于可配置线程池的执行器,就像netty 3中的MemoryAwareThreadPoolExecutor一样.

我该怎么办?

tru*_*tin 6

向管道添加处理程序时,可以指定EventExecutorGroup处理程序:

EventExecutorGroup executor = new DefaultEventExecutorGroup(...);
...

ChannelPipeline p = ch.pipeline();
p.addLast(executor, new MyHandler());
Run Code Online (Sandbox Code Playgroud)

EventExecutorGroup类似于OrderedMemoryAwareThreadPoolExecutor它不会强制执行任何内存约束.您必须实现自己的处理程序来强制执行内存约束 - MemoryAwareThreadPoolExecutor效率不高并且通常会出现性能问题.

没有替代品,MemoryAwareThreadPoolExecutor因为Netty 4中的所有处理程序方法都是按顺序为同一连接调用的.如果你想要无序执行,你将不得不将任务交给a java.util.concurrent.Executor.这个决定是有意的 - 否则处理程序实现不能消除线程安全性.