关于ACE_Reactor的性能问题
请教个问题,该如何开启多个ACE_Reactor,或者让ACE_Reactor上面有多个线程在检测网络事件?问此问题的原因是:整个ACE框架中的事件、信号、定时器的触发都是有ACE_Reactor来完成的,而我看到的例子都是用一个ACE_Reactor来串行处理这些事件对应的函数,而这个ACE_Reactor也是单线程的,这样我就担心当网络数据多的时候,它的处理速度将是一个大的瓶颈,因此希望能解决这个瓶颈。
谢谢! 个人的一点理解,不知道对不对。
框架ACE_Reactor是单例,在整个进程中只有一个,从源码不难看出。/// Delegation/implementation class that all methods will be
/// forwarded to.
ACE_Reactor_Impl *implementation_;
/// Flag used to indicate whether we are responsible for cleaning up
/// the implementation instance
bool delete_implementation_;
/// Pointer to a process-wide ACE_Reactor singleton.
static ACE_Reactor *reactor_;
/// Must delete the reactor_ singleton if true.
static bool delete_reactor_;只是在不同的平台下,或者是不同的用户需求下有不同的implementation_。
你处理事件对应的函数的线程实际是你阻塞在reactor的handle_events那里的线程。只需要你多handle_events的线程就可以了。
reactor只是框架,不是你注册“串行处理这些事件”的处理器Ace_Event_Handler。 谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理? 谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理? 谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_ev ...
yu_single 发表于 2010-11-14 23:25 http://www.acejoy.com/bbs/images/common/back.gif
用多线程跑就可以了,个别实现别忘记调用own()方法。
对于你的问题说来话长,不同平台有一些差异,建议楼主先看一下这个帖子,http://www.acejoy.com/bbs/viewthread.php?tid=575&highlight= 本帖最后由 ccl0326 于 2010-11-26 11:38 编辑
回复 1# yu_single
页:
[1]