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

时间:2013-04-16 20:18:30

标签: netty

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

我该怎么做?

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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