Loading

高效事件处理模式--Reactor模式

同步I/O模型通常用于实现Reactor模式异步I/O模型则用于实现Proactor模式

Reactor模式

  • 主线程(I/O处理单元):只负责监听文件描述符上是否有事件发生,有的话以及将该事件通知工作线程。
  • 工作线程(逻辑单元)读写数据接受新的连接处理用户请求均在工作线程中完成。
Reactor模式.png

使用同步 I/O 模型(以 epoll_wait 为例)实现的 Reactor 模式的工作流程是:

  1. 主线程往 epoll 内核事件表中注册 socket 上的读就绪事件
  2. 主线程调用 epoll_wait 等待 socket 上有数据可读。
  3. 当 socket 上有数据可读时, epoll_wait 通知主线程。主线程则将 socket 可读事件放入请求队列。
  4. 睡眠在请求队列上的某个工作线程被唤醒,它从 socket 读取数据,并处理客户请求,然后往 epoll 内核事件表中注册该 socket 上的写就绪事件
  5. 主线程调用 epoll_wait 等待 socket 可写。
  6. 当 socket 可写时,epoll_wait 通知主线程。主线程将 socket 可写事件放入请求队列。
  7. 睡眠在请求队列上的某个工作进程被唤醒,它往 socket 上写入服务器处理客户请求的结果。

参考:《Linux高性能服务器编程》 游双

posted @ 2021-01-25 14:38  JakeLin  阅读(115)  评论(0编辑  收藏  举报