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



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

我该怎么做呢?

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

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

EventExecutorGroup类似于OrderedMemoryAwareThreadPoolExecutor,除了它不强制任何内存约束。你必须实现你自己的处理程序来强制内存约束——MemoryAwareThreadPoolExecutor不是很有效,而且经常有性能问题。

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

最新更新