该文档未提供有关可用的不同类型执行程序的任何详细信息。我想要的是拥有一个基于可配置线程池的执行器,就像netty 3中的MemoryAwareThreadPoolExecutor一样。
我该怎么做?
答案 0 :(得分:6)
向管道添加处理程序时,可以指定EventExecutorGroup
以及处理程序:
EventExecutorGroup executor = new DefaultEventExecutorGroup(...);
...
ChannelPipeline p = ch.pipeline();
p.addLast(executor, new MyHandler());
EventExecutorGroup
与OrderedMemoryAwareThreadPoolExecutor
类似,不同之处在于它不强制执行任何内存约束。您必须实现自己的处理程序来强制执行内存约束 - MemoryAwareThreadPoolExecutor
效率不高并且通常会出现性能问题。
MemoryAwareThreadPoolExecutor
没有替代品,因为Netty 4中的所有处理程序方法都是按顺序为同一连接调用的。如果您想要无序执行,则必须将任务交给java.util.concurrent.Executor
。这个决定是故意的 - 否则处理程序实现不能消除线程安全性。