Reactor 单线程模式
Reactor 单线程模式,只有一个 Reactor,也就是一个线程处理所有事务,所以,在 Netty 中,只需要声明一个 EventLoopGroup 就可以了
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup);
Reactor 多线程模式
Reactor 多线程模式,实际上还是只有一个 Reactor,但是这个 Reactor 只负责处理 IO 事件,而不负责处理业务逻辑,所以,在 Netty 中,需要将业务逻辑的处理,也就是 Handler,放到另外的线程池中。
EventLoopGroup bossGroup = new NioEventLoopGroup(32); // 一个Reactor
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup);
// Handler使用线程池处理
Reactor 主从模式
Reactor 主从模式,有一个主 Reactor 和多个子 Reactor,但是,业务逻辑的处理还是在线程池中,所以,在 Netty 中,需要声明两个不同的 EventLoopGroup,Handler 依然使用线程池处理
EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 一个主Reactor
EventLoopGroup workerGroup = new NioEventLoopGroup(); // 多个子Reactor
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup);
Reactor 变异主从模式
Reactor 变异主从模式,业务线程池和子 Reactor 池合并为一,所以,在 Netty 中,Handler 放在子 Reactor 池中处理即可,默认情况,Netty 也是使用的这种模式。
EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 一个主Reactor
EventLoopGroup workerGroup = new NioEventLoopGroup(); // 多个子Reactor
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup);