MemoryAwareThreadPoolExecutor

MemoryAwareThreadPoolExecutor

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

我该怎么办?

最佳答案

将处理程序添加到管道时,可以与处理程序一起指定EventExecutorGroup

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

ChannelPipeline p = ch.pipeline();
p.addLast(executor, new MyHandler());


EventExecutorGroupOrderedMemoryAwareThreadPoolExecutor相似,除了它不强制执行任何内存限制。您必须实现自己的处理程序以强制执行内存约束-MemoryAwareThreadPoolExecutor效率不是很高,并且经常出现性能问题。

无法替换MemoryAwareThreadPoolExecutor,因为Netty 4中的所有处理程序方法都是针对同一连接顺序调用的。如果要无序执行,则必须将任务交给java.util.concurrent.Executor。该决定是有意为之的-否则处理程序的实现不能浪费任何线程安全性。

07-24 09:34