ace Proactor vs Reactor (试译)
编译:Stone Jiang
url: http://www.cppblog.com/ace
Ephy Levy 问到:
大家好,我正在Windows平台上使用ACE 5.5。在我所服务的公司里,我已
编写了一个ACE的包装体,这个包装体是服务程序的基础。我阅读了《ACE程序员指南》。在这本书中,ACE Reactor 和 Proactor 都作了解释。我们的服务器要求能同时接受1000左右的连接。我的问题是:
-那种模式更适合我的需要?
(我想使用Proactor,因为Reactor在连接数上有限制——是这样的吗?)
-如果我使用Proactor模式,那我怎样通过完成端口利用CPU数量呢?
非常感谢您的帮助?
Ephy Levy.
hi,Ephy Levy.
@(我想使用Proactor,因为Reactor在连接数上有限制——是这样的吗?)
这点您对了一半。如果您使用 ACE_WFMO_Reactor,它限制在64个处理器(handler)上,也就是在一个线程上可以承载大约60个并发的连接。
这是因为,ACE_WFMO_Reactor是基于WIN32 API::WaitForMultipileObjects的。
另一方面,您可以使用ACE_Select_Reactor,它可以配置为支持1000甚至更从的连接支持。(显示,它是基于 ::select的)
我更倾向于使用ACE_Proactor,在并发连接数上它不受限制,并且还可以在一个线程中组合使用Pipe,Socket和文件访问。
还有,ACE_WIN32_Proactor是基于完成端口的,这意味着是同步的架构,它相比于Reactor模式来说有更好的性能和吞吐能力。
@-如果我使用Proactor模式,那我怎样通过完成端口利用CPU数量呢?
为了更充分的利用您的计算机性强大的处理能力,您可以在多线程中使用ACE_WIN32_Proactor。接下来是您需求正确的使用同步机制来避免并发访问共享对象时的问题。
Ishay Green