1.Reactor 模式是编写高性能网络服务器的必备技术之一,它具有如下的优点:

  • 响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的;
  • 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
  • 可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源;
  • 可复用性,reactor 框架本身与具体事件处理逻辑无关,具有很高的复用性;

2.模式框架必备组件:事件源、Reactor 框架、多路复用机制和事件处理程序

1) 事件源

  • Linux 上是文件描述符,Windows 上就是 Socket 或者 Handle 了,这里统一称为“句柄集”;程序在指定的句柄上注册关心的事件,比如 I/O 事件。

2) event demultiplexer——事件多路分发机制

  • 由操作系统提供的 I/O 多路复用机制,比如 select 和 epoll。程序首先将其关心的句柄(事件源)及其事件注册到 event demultiplexer 上;
  • 当有事件到达时,event demultiplexer 会发出通知“在已经注册的句柄集中,一个或多个句柄的事件已经就绪”;
  • 程序收到通知后,就可以在非阻塞的情况下对事件进行处理了。对应到 libevent 中,依然是 select、poll、epoll 等,但是 libevent 使用结构体 eventop 进行了封装,以统一的接口来支持这些 I/O 多路复用机制,达到了对外隐藏底层系统机制的目的。

3) Reactor——反应器

  • 事件管理的接口,内部使用 event demultiplexer 注册、注销事件;并运行事件循环,当有事件进入“就绪”状态时,调用注册事件的回调函数处理事件。对应到 libevent 中,就是 event_base 结构体。
  • 简单的Reactor声明方式:
class Reactor
{
public: int register_handler(Event_Handler *pHandler, int event); int remove_handler(Event_Handler *pHandler, int event); void handle_events(timeval *ptv); // ...
};

4) Event Handler——事件处理程序

  • 事件处理程序提供了一组接口,每个接口对应了一种类型的事件,供 Reactor 在相应事件发生时调用,执行相应的事件处理。通常它会绑定一个有效的句柄。对应到 libevent 中,就是 event 结构体。
  • Event Handler 类两种声明方式:
class Event_Handler
{
public: // events maybe read/write/timeout/close .etc virtual void handle_events(int events) = 0; virtual HANDLE get_handle() = 0; // ...
};class Event_Handler
{
public: virtual void handle_read() = 0; virtual void handle_write() = 0; virtual void handle_timeout() = 0; virtual void handle_close() = 0; virtual HANDLE get_handle() = 0; // ...
};

4) Rector事件处理流程

libevent_Rector模式相关推荐

  1. 大淘宝服务端技术干货沉淀和总结

    网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...

  2. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  3. 【Docker】容器的几种网络模式

    当你使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器引擎,因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文介绍了Docker的4种 ...

  4. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  5. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...

  6. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

  7. 2022-2028年中国新型氟塑料行业市场发展模式及投资机会预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了新型氟塑料行业相关概述.中国新型氟塑料行业运行环境.分析了中国新型氟 ...

  8. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  9. 2022-2028年中国聚合物气体分离膜行业市场发展模式及投资前景分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了聚合物气体分离膜行业相关概述.中国聚合物气体分离膜行业运行环境.分析 ...

最新文章

  1. 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.5)
  2. mysql设置最大连接数为200_设置mysql最大连接数的方法
  3. Android之替换App桌面图标
  4. Linux多线程开发-线程同步-读写锁pthread_rwlock_t
  5. 奖金福利高达20亿,华为太太太太太任性了!
  6. Struts中DownloadAction的使用
  7. 凸优化第六章逼近与拟合 6.4 鲁棒逼近
  8. ButterKnife 8.6.0 使用
  9. string.Empty与,null的区别
  10. vue 针试打印机实现
  11. 关于特征筛选中的IV值
  12. ppt滚动动画随机选题
  13. Unity中录制VR全景视频(可录制UGUI)
  14. 如何将图片批量转换成PDF?
  15. numpy一行转为一列
  16. 从代码上看鸿蒙 APP 与安卓 APP 的关系
  17. STM32用ST-link下载程序
  18. SEO优化|如何让网站关键词排名快速提高
  19. 【项目部署】使用Jenkins一键打包部署前端Vue应用
  20. Socket的用法——普通Socket

热门文章

  1. 前端几种禁用情况(鼠标事件)
  2. 台电P89s mini root教程
  3. OPPON5117_官方线刷包_救砖包_解账户锁
  4. JS实现动画之setTimeout、setInterval和requestAnimationFrame
  5. GDOI 2016 Day1 T1 中学生数学题
  6. Python学习笔记之威虎山武器库
  7. 线性表的顺序存储结构详解
  8. Pytorch构建网络细节总结
  9. Codesys使用ST语言实现离散PID模型的仿真(非自带PID模型)
  10. 率土之滨服务器维护6,率土之滨几天开6,多少战力可以开6