Netty'的解决方案;s每个处理程序/通道的单线程限制

Netty'的解决方案;s每个处理程序/通道的单线程限制,netty,Netty,在Netty 4中,有这样一个选项:“EventExecutor和EventLoop分配给处理程序或通道的始终是单线程的。”这看起来有利于线程安全,但在处理数百个连接的情况下,对吞吐量并不是很好。当有空闲线程处理某些事件时,它们可能正在队列中等待。在我的研究中,我发现了相关的和,但对事件循环、组、执行器和调用器非常困惑,无法理解如何使用它们来获得我想要的 我有一套处理程序来编码和解码数据,并将输入消息重定向到akka系统。有些消息很大,序列化/反序列化它们需要花费宝贵的时间。我希望这个处理程序不

在Netty 4中,有这样一个选项:“
EventExecutor
EventLoop
分配给处理程序或通道的始终是单线程的。”这看起来有利于线程安全,但在处理数百个连接的情况下,对吞吐量并不是很好。当有空闲线程处理某些事件时,它们可能正在队列中等待。在我的研究中,我发现了相关的和,但对事件循环、组、执行器和调用器非常困惑,无法理解如何使用它们来获得我想要的

我有一套处理程序来编码和解码数据,并将输入消息重定向到akka系统。有些消息很大,序列化/反序列化它们需要花费宝贵的时间。我希望这个处理程序不要等待特定的线程,而是在池中第一个可用的线程中工作

我能用Netty 4做这个吗?或者我应该使用未声明为稳定的版本5.0.0Alpha1吗?这真的是个问题吗

代码如下:

bossGroup = new NioEventLoopGroup(1, new NamedThreadFactory("SocketServerBossExecutor"));
workerGroup = new NioEventLoopGroup(NUMBER_OF_WORKER_THREADS, new NamedThreadFactory("SocketServerWorkerExecutor"));

serverBootstrap = new ServerBootstrap()
        .group(bossGroup, workerGroup)
        .channel(NioServerSocketChannel.class)
        .childHandler(new ChannelInitializer() {
            @Override
            protected void initChannel(Channel ch) throws Exception {
                ch.pipeline()
                        //Decoder
                        .addLast("frameDecoder", new LengthFieldBasedFrameDecoder(MAX_FRAME_LENGTH, LENGTH_FIELD_OFFSET, LENGTH_FIELD_LENGTH, LENGTH_ADJUSTMENT, INITIAL_BYTES_TO_STRIP))
                        .addLast("protobufDecoder", PROTOBUF_DECODER)
                        .addLast("protoMessageDecoder", PROTO_MESSAGE_DECODER)

                        //Encoder
                        .addLast("frameEncoder", FRAME_ENCODER)
                        .addLast("protobufEncoder", PROTOBUF_ENCODER)
                        .addLast("protoMessageEncoder", PROTO_MESSAGE_ENCODER)

                        .addLast("handler", upstreamHandler);
            }
        })
UPD:如果可能的话,我也不希望将具有不同通道的I/O操作绑定到同一线程