Reactor模式基于事件驱动,特别适合处理海量的I/O事件。
1. 单线程模型
Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上处理。
2. 多线程模型
Reactor多线程模型,指的是存在一组NIO线程处理IO操作。
- 有一个专门的NIO线程-Acceptor线程用于监听服务端,接收客户端的TCP连接请求。
- 网络IO操作-读、写等由一个NIO线程池负责,该线程池包含一个任务队列和N个可用线程,由这些NIO线程负责消息的读取、解码、编码和发送。
- 1个NIO线程可以同时处理N条链路,但一个链路只对应一个NIO线程,防止发生并发操作问题。
3. 主从多线程模型
- 从主线程池中随机选择一个Reactor线程作为Acceptor线程,用于绑定监听端口,接收客户端连接。
- Acceptor线程接收客户端连接请求之后创建新的SocketChannel,将其注册到主线程池的其它Reactor线程上,由其负责接入认证、IP黑白名单过滤、握手等操作。
- 步骤b完成之后,业务层的链路正式建立,将SocketChannel从主线程池的Reactor线程的多路复用器上摘除,重新注册到Sub线程池的线程上,用于处理I/O的读写操作。