目前存在的线程模型有:
- 传统阻塞 IO 服务模型
- Reactor 模式, 根据 Reactor 数量和处理资源池线程的数量不同, 又有 3 重典型的实现.
- 单 Reactor 单线程
- 单 Reactor 多线程
- 主从 Reactor 多线程.
传统阻塞 IO 服务模型
- 一个线程对应一个客户端, 如果客户端过多就会占用很大的系统资源.
- 没有可读数据时, 线程会阻塞, 造成资源浪费.
Reactor 模式
下图只是对 Reactor 模式的一个整体理念, 当涉及到三个具体实现时, 有不同的变化.
基于 I/O 复用模型: 多个连接共用一个阻塞对象, 应用程序只需要在一个阻塞对象等待, 无需阻塞等待所有连接. 当某个连接有新的数据可以处理时, 操作系统通知应用程序, 线程从阻塞状态返回, 开始业务处理.
基于线程池复用线程资源: 不必再为每个连接创建线程, 将连接完成后的业务处理任务分配给线程进行处理, 一个线程可以处理多个连接的业务.
就是说, 服务处理器使用 I/O 复用监听一个或多个客户端的输入事件, 然后将这些事件分发到不同的线程处理.
也可以简单粗暴的理解为: IO多路复用 + 线程池 = Reactor 模式