文档没有提供任何关于不同类型的可用执行器的详细信息。我想要的是有一个基于可配置线程池的执行器,很像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
。这个决定是有意为之——否则处理程序的实现就不能对线程安全进行任何消耗。