我正在使用Netty4创建一个服务器,它需要服务于多个客户端连接。ServerBootstrap是用父线程和工作线程组构造的。根据ServerBootStrap.group()方法的文档
“为父(接受方)和子(客户端)设置EventLoopGroup。这些EventLoopGroup用于处理SocketChannel和频道的所有事件和IO。”
据我所知,ParentExecutor组将处理任何传入的连接,并将其传递给子执行器组执行。因此,为了服务器许多客户端,我有以下设置
final ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup(Runtime.getRuntime()
.availableProcessors() * 3))
.channel(NioServerSocketChannel.class)
.childHandler(new MyInitializer());现在的问题是,我的Handler中的以下方法会在子executor组上执行吗?我怀疑它是通过SingleThreadEventExecutor以单线程方式处理的?
protected void channelRead0(final ChannelHandlerContext ctx, final AppMessage msg)
final AppMessage msg) throws Exception {发布于 2013-10-29 11:29:37
是的,在fireChannelRead()执行期间,处理程序将在子线程组中执行
发布于 2016-03-18 06:00:11
子组(也称为worker组)实际上是由Netty创建的线程(在Netty中称为EventLoop )池。默认的NioEventLoopGroup的池大小是Runtime.getRuntime().availableProcessors() * 2)。每当连接出现时,Netty将从子组中安排一个线程(又名EventLoop)来处理通道和消息传输等等。属于ChannelPipeline的所有处理程序都将在这个线程中执行。
https://stackoverflow.com/questions/19656067
复制相似问题