【Linux】事件处理模式

文章目录

服务器框架

  • I/O处理单元:处理客户连接、读写网络数据
  • 逻辑单元:接收数据后应该做什么例如解析数据、封装响应数据
  • 请求队列:各个单元的中介即通信方式
  • 服务器通常要处理三类事件:I/O事件、信号事件(signal/sigaction)以及定时事件(alarm/setitimer),结合I/O多路复用和多线程/多进程,有两种高效的事件处理模式分别是应用于同步的Reactor模式和应用于异步的Proactor模式

Reactor模式

  • 要求主线程只负责监听文件描述符上是否有事件发生,有的话则通知工作线程,交给工作线程来处理。除此之外主线程不做任何其他的工作,接收新的连接、读写数据、处理客户的请求都在工作线程中完成。
  • 工作流程(epoll为例)
      1. epoll_ctl()向内核确定并注册需要监听的文件描述符
      2. 主线程调用epoll_wait()来等待epoll_event就绪事件即等待文件描述符上有数据可读
      3. 当有数据可读时,epoll_wait()通知主线程,主线程将可读事件放入请求队列
      4. 唤醒请求队列的工作线程,从文件描述符读取数据并处理客户请求,然后往epoll内核注册文件描述符上的写就绪事件
      5. 主线程调用epoll_wait()来等待文件描述符上有数据可写
      6. 当有数据可写时,epoll_wait()通知主线程,主线程将可写事件放入请求队列
      7. 唤醒请求队列的工作线程,往文件描述符上写入服务器处理客户请求的结果。

Proactor模式

  • Proactor模式应用于异步I/O中,将所有的I/O操作都交给主线程和内核来进行处理,工作线程仅仅负责业务逻辑即收到数据后应该做什么。
  • 区别于Reactor模式,Proactor模式数据提交到工作线程时已经不需要执行I/O操作,只需要执行逻辑即可

同步I/O模拟Proactor模式

  • 主线程执行监听和数据读写操作,读写完成后向工作线程通知,从工作线程的角度来看,它直接获得了数据I/O的结果,和Proactor模式一样,工作线程只需要进行业务逻辑即可。
相关推荐
黄筱筱筱筱筱筱筱31 分钟前
LINUX-防火墙
linux·服务器·网络
сокол1 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神2 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
凯丨2 小时前
Claude Code 自动化开发的完整体系
运维·自动化
SilentSamsara5 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
不吃土豆的马铃薯5 小时前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
疯狂成瘾者5 小时前
常见的 Linux 版本
linux·运维·服务器
szxinmai主板定制专家5 小时前
基于ZYNQ MPSOC图像采集与压缩系统总体设计方案
linux·arm开发·人工智能·嵌入式硬件·fpga开发
liulilittle5 小时前
TCP UCP:基于卡尔曼滤波的BBR增强型拥塞控制算法
linux·网络·c++·tcp/ip·算法·c·通讯
xingyuzhisuan6 小时前
GPU服务器集群搭建指南——选型、部署、优化+避坑全解析
运维·服务器·人工智能·gpu算力