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