Netty中的I / O线程是什么?

时间:2017-12-13 12:49:51

标签: java multithreading netty

我在the article中阅读了有关线程模型的Netty,并对Netty中的ServerBootstrap提出了疑问。请考虑以下NioEventLoopGroup workerGroup = new NioEventLoopGroup(16) new ServerBootstrap() .childHandler( new ChannelInitializer<Channel> { override def initChannel(ch: Channel) = ch.pipeline() .addLast(new ChannelDuplexHandler) // Without specifying event-loop-group .addLast(workerGroup, new HttpRequestDecoder()) //event group specified } 声明:

ChannelDuplexHandler

据我所知,IO将直接从IO线程调用。

问题是我如何配置NioEventLoopGroup myIoGroup = new NioEventLoopGroup(16); // Is it possible to make it IO-group? - 线程(更改IO线程的数量,可能会覆盖IO线程以定义我的自定义中断行为)?

我可以将事件循环组设为IO组。我的意思是

--wrap

1 个答案:

答案 0 :(得分:0)

我对你的问题感到有点困惑,所以我希望这能解决它...... EventLoopGroup使用的线程是&#34; IO-threads&#34;你传入的数字是&#34; IO-threads&#34;你想用。这些线程中的每一个都将处理0-n个通道。要增加IO线程的数量,您需要指定一个不同的数字,然后&#34; 16&#34;这里。

只有一个&#34; IO-thread&#34;将用于每个频道。如果要确保从IO线程卸载ChannelHandler,通常会创建DefaultEventExecutorGroup并在添加ChannelHandler时指定它。 EventExecutorGroup应该在不同的Channel实例之间共享,以充分利用线程。

这样的事情:

NioEventLoopGroup workerGroup = new NioEventLoopGroup(16)        
EventExecutorGroup executorGroup = new DefaultEventExecutorGroup(numberOfThreads);
new ServerBootstrap()
    .childHandler(
         new ChannelInitializer<Channel> {
             override def initChannel(ch: Channel) = ch.pipeline()
                 .addLast(new ChannelDuplexHandler)   // Without specifying event-loop-group
                 .addLast(executorGroup, new HttpRequestDecoder()) 
}