暴打老板3内置MOD菜单
64.11MB · 2025-10-23
有两种高效的事件处理模式,Reactor、Proactor。同步IO模型通常用于实现Reactor模式,异步IO模型通常用于实现Proactor模型。(同步IO/异步IO的概念在 本专栏webserver 00 里面有介绍)
· IO事件 :
来源:客户端或外部系统
服务端的收发消息操作机会。
以 socket 通讯为例:当 socket 的状态发生变化时,操作系统会触发可读或可写事件,
服务端的 IO 处理单元就会执行相应的读/写操作,从 socket 读取数据,或者向 socket 写入数据。(对应服务端的 数据接收行为 和 数据发送行为)
· 信号:
来源:操作系统或服务端自身触发
指系统或进程发送的信号,用于通知服务端某些异步状态。
例如:系统终止信号(SIGTERM)、挂起信号(SIGSTOP)或自定义的应用信号。
服务端可以通过捕获信号做一些清理工作或者重新加载配置。
· 定时事件:
来源:服务端自身
指按照设定时间间隔触发的事件,用于处理周期性任务。
例如:定期检查超时连接、定时刷新缓存、周期性统计日志等。
要求 主线程(上篇里面提到的 IO处理单元)只负责监听文件描述符上是否有事件发生。
有的话就通知工作线程(逻辑单元,工作线程一般有很多个),将socket可读可写事件放入请求队列,交给工作线程处理。(注意:这里面主线程并没有进行读写事件,读写事件是工作线程处理的)除此之外,主线程不做任何其他工作。
客户端请求
│
▼
Reactor (事件分发器)
│
├─ 可读事件 → 读 Handler → 处理请求
│
└─ 可写事件 → 写 Handler → 发送响应
可以把 Reactor 模型想象成一个“前台接待员 + 部门”的系统: