我正在学习Netty,但我无法弄清楚Netty线程。
哪个是IO线程?我在线阅读了一些页面,说明你不能阻止IO线程。但是,我不知道IO线程是哪个。
例如:
b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new SimpleChatServerInitializer()) // (4)
.option(ChannelOption.SO_BACKLOG, 128) // (5)
.childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
WorkGroup
或bossGroup
?
答案 0 :(得分:2)
bossGroup和workerGroup都是为I / O处理提供线程的线程池。 bossGroup线程处理客户端连接请求,并接受连接并为每个客户端创建一个通道。之后,将仅为此通道分配来自workerGroup的线程,该通道可能同时具有入站和出站数据包。对于入站数据包,工作线程将由事件调用,需要读取数据包。对于出站数据包,工作线程需要将它们写入通道套接字缓冲区以进行发送。这就是为什么它们都是I / O线程。
然后准备(从MySQL / MongoDB等持久性存储中获取消息/数据),如果将业务逻辑放入同一个工作线程中,它将被阻塞。在更糟糕的情况下,如果其他通道正在使用/共享相同的工作线程。业务逻辑将阻止可能具有紧急(时间敏感)数据包的其他通道的I / O.这会导致问题。因此,您应该让业务逻辑在不同的线程(例如用户定义的线程)中执行,或者您可以创建一个单独的EventExecutorGroup并让业务逻辑处理程序在该线程组中。
希望以上有所帮助。