yu_single 发表于 2010-11-14 21:42:25

关于ACE_Reactor的性能问题

请教个问题,该如何开启多个ACE_Reactor,或者让ACE_Reactor上面有多个线程在检测网络事件?

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

谢谢!

wuyudry 发表于 2010-11-14 22:36:32

个人的一点理解,不知道对不对。

框架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。

yu_single 发表于 2010-11-14 23:22:59

谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理?

yu_single 发表于 2010-11-14 23:25:08

谢谢楼上回复,你的意思是不是说只要在多个线程里面调用handle_events就行了,那我接着有个问题,handle_events是线程安全的吗?
另外,如果我的系统是在linux下运行,那么底层应该是调用select方法来监控事件的,那多个线程调用handle_events我想就意味着将有多个线程来调用select方法,那在多线程情况下,select方法会不会将同一事件发给多个线程,从而导致重复处理?

modern 发表于 2010-11-14 23:42:23

谢谢楼上回复,你的意思是不是说只要在多个线程里面调用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:26:54

本帖最后由 ccl0326 于 2010-11-26 11:38 编辑

回复 1# yu_single
页: [1]
查看完整版本: 关于ACE_Reactor的性能问题