找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4669|回复: 5

关于ACE_Reactor的性能问题

[复制链接]
发表于 2010-11-14 21:42:25 | 显示全部楼层 |阅读模式
请教个问题,该如何开启多个ACE_Reactor,或者让ACE_Reactor上面有多个线程在检测网络事件?

问此问题的原因是:整个ACE框架中的事件、信号、定时器的触发都是有ACE_Reactor来完成的,而我看到的例子都是用一个ACE_Reactor来串行处理这些事件对应的函数,而这个ACE_Reactor也是单线程的,这样我就担心当网络数据多的时候,它的处理速度将是一个大的瓶颈,因此希望能解决这个瓶颈。

谢谢!
发表于 2010-11-14 22:36:32 | 显示全部楼层
个人的一点理解,不知道对不对。

框架ACE_Reactor是单例,在整个进程中只有一个,从源码不难看出。
  1.   /// Delegation/implementation class that all methods will be
  2.   /// forwarded to.
  3.   ACE_Reactor_Impl *implementation_;
  4.   /// Flag used to indicate whether we are responsible for cleaning up
  5.   /// the implementation instance
  6.   bool delete_implementation_;
  7.   /// Pointer to a process-wide ACE_Reactor singleton.
  8.   static ACE_Reactor *reactor_;
  9.   /// Must delete the reactor_ singleton if true.
  10.   static bool delete_reactor_;
复制代码
只是在不同的平台下,或者是不同的用户需求下有不同的implementation_。

你处理事件对应的函数的线程实际是你阻塞在reactor的handle_events那里的线程。只需要你多handle_events的线程就可以了。

reactor只是框架,不是你注册“串行处理这些事件”的处理器Ace_Event_Handler。
 楼主| 发表于 2010-11-14 23:22:59 | 显示全部楼层
谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理?
 楼主| 发表于 2010-11-14 23:25:08 | 显示全部楼层
谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理?
发表于 2010-11-14 23:42:23 | 显示全部楼层
谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_ev ...
yu_single 发表于 2010-11-14 23:25
用多线程跑就可以了,个别实现别忘记调用own()方法。
对于你的问题说来话长,不同平台有一些差异,建议楼主先看一下这个帖子,http://www.acejoy.com/bbs/viewthread.php?tid=575&highlight=
发表于 2010-11-26 11:26:54 | 显示全部楼层
本帖最后由 ccl0326 于 2010-11-26 11:38 编辑

回复 1# yu_single
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-16 12:57 , Processed in 0.021586 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表