高效事件处理模式--Reactor模式
同步I/O模型通常用于实现Reactor模式,异步I/O模型则用于实现Proactor模式。
Reactor模式
- 主线程(I/O处理单元):只负责监听文件描述符上是否有事件发生,有的话以及将该事件通知工作线程。
- 工作线程(逻辑单元):读写数据,接受新的连接,处理用户请求均在工作线程中完成。
![Reactor模式.png](https://i.loli.net/2020/12/17/4QTMAk8369fYsDv.png)
使用同步 I/O 模型(以 epoll_wait 为例)实现的 Reactor 模式的工作流程是:
- 主线程往 epoll 内核事件表中注册 socket 上的读就绪事件。
- 主线程调用 epoll_wait 等待 socket 上有数据可读。
- 当 socket 上有数据可读时, epoll_wait 通知主线程。主线程则将 socket 可读事件放入请求队列。
- 睡眠在请求队列上的某个工作线程被唤醒,它从 socket 读取数据,并处理客户请求,然后往 epoll 内核事件表中注册该 socket 上的写就绪事件。
- 主线程调用 epoll_wait 等待 socket 可写。
- 当 socket 可写时,epoll_wait 通知主线程。主线程将 socket 可写事件放入请求队列。
- 睡眠在请求队列上的某个工作进程被唤醒,它往 socket 上写入服务器处理客户请求的结果。
参考:《Linux高性能服务器编程》 游双