2014年4月2日

Reactor和Proactor

摘要: http://www.cnblogs.com/dawen/archive/2011/05/18/2050358.html两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proa 阅读全文

posted @ 2014-04-02 22:09 kangbry 阅读(153) 评论(0) 推荐(0) 编辑

libevent学习 事件主循环

摘要: libevent的事件主循环主要通过event_base_loop()函数完成 开始 -> 如果发现系统时间被向后调整,校正系统时间 -> 根据timer heap中event的最小超时事件计算系统i/o demultiplexer的最大等待时间 -> 更新last wait time 清空time cache -> 调用i/o demultiplexer等待就绪的i/o events -> 检查signal的激活标,如果被设置,则检测激活signal event,并把event插入到激活链表中 -> 将就绪的i/o event插入到激活链表中 -> 阅读全文

posted @ 2014-04-02 21:53 kangbry 阅读(268) 评论(0) 推荐(0) 编辑

libevent学习 事件流程

摘要: 使用libevent设置定时器1 首先应用程序准备并初始化event,设置好事件类型和回调函数 a. evet_init() 初始化libevent库 相当于初始化一个Reactor实例 b. event_set()设置回调函数和关注的事件 c event_base_set() 设置event从属的event_base2 向libevent添加该事件event,对于定时事件,libevent使用小根堆管理,key为超时时间,对于信号量和i/o事件,libevent将其放入到等待链表中,是一个双向链表结构 a event_add 添加事件 相当于Reactor::register_handler 阅读全文

posted @ 2014-04-02 21:33 kangbry 阅读(234) 评论(0) 推荐(0) 编辑

libevent学习 Reactor模式

摘要: Reactor逆置了事件处理流程, 应用程序需要提供相应接口注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口Reactor模型框架组件:事件源,Reactor框架,多路复用机制和事件处理程序事件源: linux是文件描述符 windows是socket或者handle,统称句柄集, 程序在指定句柄上注册关心的事件event demultiplexer -- 事件多路分发机制:由操作系统提供的i/o多路复用机制,比如select和epoll.程序首先将关心的句柄及其事件注册到event demultiplexer上,当有事件到达时,event demulti 阅读全文

posted @ 2014-04-02 20:33 kangbry 阅读(324) 评论(0) 推荐(0) 编辑

导航