ACE Reactor和Proactor框架

原创 2005年08月15日 23:52:00

      这段时间工作需要一直用ace框架开发,由一窍不通渐渐明白了一些,最可气的是这方面的文档又不全面,公司也不能上外网,到最后完全是看代码看出来些许头目。

      Reactor框架是按照相关帮助上所说的那样,在windows平台上是根据WaitForMultiObjects实现的边缘触发,是类似与电路中的上升沿触发,当条件具备后(相关操作可以进行),就触发Svc_Handler的虚函数。
      由于该函数自身的限制,只能同时等待64个句柄。框架使用两个句柄实现定时器和框架本身,也就是说,只剩下62个句柄供程序使用。刚开始用Reactor写架构,最后才发现居然有这个限制,迫不得已必须改成Proactor框架。

      Proactor框架没有Reactor框架看起来容易懂,刚开始我甚至奇怪:没有一个句柄保存相关对端信息,handle_read_stream和handle_write_stream甚至就给你提供好了你要收发的数据,而且没有对端信息给你,是怎么区分不同的消息的??

      仔细查阅了一下,才明白Proactor是基于异步IO的框架,对每一个对端连接,都会新建一个Service_Handler来处理(当对端断开后并不清除,而是会重复使用),对端信息在Service_Handler的address挂钩方法可以获取,需要自己保存。而数据是在“已准备好”的情况下才通知相关handler处理,整个框架是基于类似与电平触发的,当事件完成后通知,而不是“可以操作”时通知,因此在handle_read_stream中你直接获取了你想要读取的数据,当然如果你需要更多的数据,需要将原先的Message_Block传入继续读。
      Proactor开始工作是从handler中的open方法开始,在这里你会调用Asynch_Reader_Stream的read方法,从此时开始进入Proactor框架循环,open中的read方法完成后,会进入handle_read_stream,在这里面通常的业务处理就是根据请求,生成一个响应,然后调用Asynch_Writer_Stream的write方法,write结束后会通知到handle_write_stream,这里通常就会再开一个read,再次进入handle_read_stream。
      这里讲的是半双工模式,也即收到一条请求,做出应答,然后才会接受下一个请求。如果选择全双工模式,可以在handle_read_stream中write响应并启动下一次read。

      感觉上,使用ACE最大的方便是对自己的工作不需要做太多移植方面的考虑,而最大的不便就是相关文档太少,自带的帮助根本不能用。而且现在还遇到一个问题,开始了事件循环以后不知道怎样“安全”的结束。Reactor::end_reactor_event_loop和Proactor::end_event_loop都不能完全结束相关启动的线程循环,强行结束后会有一大堆内存泄漏等着你。

相关文章推荐

ACE 的Reactor/Proactor框架下高并发、大容量吞吐介绍

最近接触力ACE,发现了很多好文章,在此转载一下,也当作一个笔记吧。 Reactor与 Proactor 基本概念 在高性能的I/O设计中,有两个比较著名的模式React...

基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结

Reactor与 Proactor 基本概念 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用...
  • weiqubo
  • weiqubo
  • 2015年01月20日 15:19
  • 1367

【原创】基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结

Reactor与 Proactor 基本概念 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I...
  • rjj510
  • rjj510
  • 2012年09月17日 11:21
  • 3945

基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结

Reactor与 Proactor 基本概念 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异...
  • csd1208
  • csd1208
  • 2013年05月10日 10:57
  • 1029

ACE:Reactor框架处理事件和多个I/O流

 ACE Reactor框架:    只要做三件事:        1.从ACE_Event_Handler派生一个或多个类,并给各个虚回调方法增加应用特有的事件处理行为        2.向ACE_...

ACE Reactor框架处理事件及多个I/O流

ACE Reactor框架设计的目标是,实现一种灵活的事件处理机制,使应用无需为了满足事件处理的需要而编写平台相关的中心代码。使用Reactor框架,应用要实现其事件处理只需要做三件事情。ONE:从 ...

ACE_Proactor网络通信示例代码

  • 2009年02月07日 15:43
  • 17KB
  • 下载

设计模式 reactor和proactor(转)

原文地址: http://xmuzyq.javaeye.com/blog/783218 ===================================================== ...

Reactor模式和Proactor模式

一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应...
  • LF_2016
  • LF_2016
  • 2017年05月25日 09:41
  • 466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE Reactor和Proactor框架
举报原因:
原因补充:

(最多只允许输入30个字)