libevent之Reactor模式详解
转自:http://blog.csdn.net/sparkliang/article/details/4957667
前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件和Reactor的对应关系,在后面的章节中可能还会提到本节介绍的基本概念。
1 Reactor的事件处理机制
“Reactor”公司HR就记下了你的联系方式,结果出来后会主动打电话通知你:有没有被录取啊,还是被据了;你不用自己打电话去问结果,事实上也不能,你没有HR的留联系方式。
2 Reactor模式的优点
3 Reactor模式框架
使用Reactor模型,必备的几个组件:事件源、Reactor框架、多路复用机制和事件处理程序,先来看看Reactor模型的整体框架,接下来再对每个组件做逐一说明。
1) 事件源
Linux上是文件描述符,Windows上就是Socket或者Handle了,这里统一称为“句柄集”;程序在指定的句柄上注册关心的事件,比如I/O事件。
- 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:
- 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;
- // ...
- };
- class Event_Handler
- {
- public:
- // events maybe read/write/timeout/close .etc
- virtual void handle_events(int events) = 0;
- virtual HANDLE get_handle() = 0;
- // ...
- };
4 Reactor事件处理流程
前面说过Reactor将事件流“逆置”了,那么使用Reactor模式后,事件控制流是什么样子呢?
可以参见下面的序列图。
5 小结
上面讲到了Reactor的基本概念、框架和处理流程,对Reactor有个基本清晰的了解后,再来对比看libevent就会更容易理解了,接下来就正式进入到libevent的代码世界了,加油!
libevent之Reactor模式详解相关推荐
- (一)Reactor模式详解
阅读libevent代码版本为1.4.13 stable版本,阅读书籍参考张亮大神libevent源码深度剖析. 在此主要记录自己学习过程中的一些点点滴滴. 阅读之前需要先了解一下5中I/O模型的比较 ...
- Reactor模式详解(转)
在学习netty源码以前,需要熟悉JDK 中的NIO,多线程:了解一些设计模式:例如工厂方法.抽象工厂.建造者.外观.代理等:还有NIO的Reactor和AIO的Proactor模式.下边我转了两篇关 ...
- Reactor模式详解及 三种模式演变
无论是C++还是Java编写的网络框架,大多数都是基于Reactor模式进行设计和开发,Reactor模式基于事件驱动,特别适合处理海量的I/O事件. 什么是Reactor模式 要回答这个问题,首先当 ...
- Reactor模式详解
本文翻译至某大神的论文,论文名字叫就叫reactor. reactor设计模式用于需要并发处理多个客户端的服务器. 1. 举个例子吧 假设我们需要建立一个提供分布式日志服务的事件驱动服务器 ...
- Linux后端服务器网络编程之线程模型丨reactor模型详解
前言 上一篇文章<后端服务器网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程/线程模型的选择.本文将主要介绍传统的和目前流行的进程/线程模型,在 ...
- 【后端开发】Reactor 模型详解
研究背景 其实我们在研究netty的时候我们必定绕不过NIO的,也必定必须研究一下这个Reactor模型的,如果不进行这个Reactor模型和NIO知识点的研究,那么我们必定掌握不了Netty的精髓, ...
- getinstance方法详解_二、设计模式总览及工厂模式详解
二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...
- Spotify敏捷模式详解三部曲第二篇:研发过程
本文转自:Scrum 中文网 引言 在本系列文章的第一篇,我们介绍了Spotify的敏捷研发团队,以及它独特的组织架构.Spotify的研发团队采用的是一种非常独特的组织架构,如下图所示: 整个研发组 ...
- Spotify敏捷模式详解三部曲第一篇:研发团队
本文转自:Scrum中文网 引言 2018年4月,来自北欧瑞典的音乐流媒体公司.百亿美元独角兽Spotify创造了历史,它成为了当代上市公司当中,第一家通过"直接上市"的方式在美国 ...
最新文章
- 通过CH340G驱动的Nano ATMEAG328P驱动板初步测试
- 限制用户对页的访问php,如何限制对Django中管理页的访问?
- 基于java的社交网站毕业设计_软件工程毕业设计_社交网站.pdf
- QTP的Action之间传递参数
- rx.observable_在Spring MVC流中使用rx-java Observable
- ad域需要自建dns服务器吗,创建AD DS域服务(图文详解)
- 2001~2020大数据行业怎么样?面临哪些挑战?解决了什么问题?
- 编写vbs脚本发送邮件
- python函数定义时参数相当于占位符_python中函数的参数
- SSL常用专业缩略语汇总
- 《WinForm开发系列之控件篇》Item16 ErrorProvider
- 索引导致大量写入数据时效率低下
- 无线键鼠接收器配对怎么就那么难?简直就是浪费
- android 壁纸制作教程,教你如何自己制作安卓手机壁纸的方法教程
- 企业数智化升级的四个“拦路虎”
- C++ tbb 并发容器适用场景 concurrent_set concurrent_map concurrent_queue
- 4G图传移动视频取证-可视安全生产监管-常见问题解答FAQ
- 监控文件变化 (Python—看门狗)
- 网易云音乐你喜欢吗?你自己也可以做一个
- 微服务的精髓,Spring Cloud 到底该学到什么程度才算精通?
热门文章
- 攻防世界php2_攻防世界-web2
- php excel cpu高,phpexcel读文件的时候cpu99%
- 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
- Java 面试知识点解析(二)——高并发编程篇
- Spring事务传递性探讨
- echarts散点图使用
- 如何管理并设计你的口令
- 如何读懂并写出装逼的函数式代码
- mysql dba系统学习(18)mysql主从复制的实现 mysql dba系统学习(19)配置mysql+lvs+keeplived实现Mysql读操作的负载均衡
- Python list 数据类型:列表