ace Proactor vs Reactor (試譯)
編譯:Stone Jiang
url: http://www.shnenglu.com/ace
Ephy Levy 問(wèn)到:
大家好,我正在Windows平臺(tái)上使用ACE?5.5。在我所服務(wù)的公司里,我已
編寫(xiě)了一個(gè)ACE的包裝體,這個(gè)包裝體是服務(wù)程序的基礎(chǔ)。我閱讀了《ACE程序員指南》。在這本書(shū)中,ACE?Reactor?和?Proactor?都作了解釋。我們的服務(wù)器要求能同時(shí)接受1000左右的連接。我的問(wèn)題是:
-那種模式更適合我的需要?
(我想使用Proactor,因?yàn)镽eactor在連接數(shù)上有限制——是這樣的嗎?)
-如果我使用Proactor模式,那我怎樣通過(guò)完成端口利用CPU數(shù)量呢?
非常感謝您的幫助?
Ephy?Levy.
?
hi,Ephy Levy.
@(我想使用Proactor,因?yàn)镽eactor在連接數(shù)上有限制——是這樣的嗎?)
這點(diǎn)您對(duì)了一半。如果您使用 ACE_WFMO_Reactor,它限制在64個(gè)處理器(handler)上,也就是在一個(gè)線(xiàn)程上可以承載大約60個(gè)并發(fā)的連接。
這是因?yàn)?,ACE_WFMO_Reactor是基于WIN32 API::WaitForMultipileObjects的。
另一方面,您可以使用ACE_Select_Reactor,它可以配置為支持1000甚至更從的連接支持。(顯示,它是基于 ::select的)
我更傾向于使用ACE_Proactor,在并發(fā)連接數(shù)上它不受限制,并且還可以在一個(gè)線(xiàn)程中組合使用Pipe,Socket和文件訪(fǎng)問(wèn)。
還有,ACE_WIN32_Proactor是基于完成端口的,這意味著是同步的架構(gòu),它相比于Reactor模式來(lái)說(shuō)有更好的性能和吞吐能力。
@-如果我使用Proactor模式,那我怎樣通過(guò)完成端口利用CPU數(shù)量呢?
為了更充分的利用您的計(jì)算機(jī)性強(qiáng)大的處理能力,您可以在多線(xiàn)程中使用ACE_WIN32_Proactor。接下來(lái)是您需求正確的使用同步機(jī)制來(lái)避免并發(fā)訪(fǎng)問(wèn)共享對(duì)象時(shí)的問(wèn)題。
Ishay Green