我在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
答案 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())
}