ace Proactor vs Reactor (試譯)
編譯:Stone Jiang
url: http://www.shnenglu.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