reactor介绍
reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。
Reactor的优点和应用
Reactor最常用于非阻塞的socket
传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干,程序就阻塞在事件上。
有了Reactor以后的设计,告诉Reactor你所关注的事件和事件发生后的处理器,Reactor充当一个中间人的角色,非阻塞的检测事件是否发生,如果发生就调用注册的处理器。与传统设计不同的是Reactor可以同时非阻塞的检测多个I/O上的事件并处理,大大提高了程序运行效率。
以ev_io为例,说明reactor模式
初始化事件处理器
ev_io_init
注册事件处理器,把事件处理器添加到ev_loop的观察列表中
ev_io_start
移除事件处理器,把事件处理器从ev_loop的观察列表中移除
ev_io_stop
reactor主循环,I/O多路复用和事件分发器
ev_run
{
    //检查关注fd列表fdchanges,新增加或者修改的fd都保存在这个列表中
    //通过fd查找注册的事件处理器ANFD,检查事件处理器的关注事件
    fd_reify

    调用跨平台的多路复用api,封装过的,epoll的封装在ev_epoll.c
    backend_poll    

    把事件加入待处理列表
    ev_feed_event    

    //调用所有的待处理事件处理器
    ev_invoke_pending
}
reactor设计模式
reactor模式的主要步骤:
1.client通过ev_io_init和ev_io_start接口把fd和事件处理器、套接字、关注的事件加入到reactor中
2.Reactor的主循环调用I/O多路复用API获取就绪事件,并把就绪事件添加到就绪列表中
3.事件分发器根据就绪列表中的fd,查找并调用client注册的事件处理器

相关文章:

  • 2021-12-11
  • 2022-12-23
  • 2022-12-23
  • 2021-06-20
猜你喜欢
  • 2021-04-13
  • 2021-10-04
  • 2021-07-17
  • 2021-10-30
相关资源
相似解决方案