ACE與ASIO之間關(guān)于Socket編程的比較
轉(zhuǎn)自:FREE MY SOUL
ACE是一個(gè)很成熟的中間件產(chǎn)品,為自適應(yīng)通訊環(huán)境,但它過于宏大,一堆的設(shè)計(jì)模式,架構(gòu)是一層又一層,對(duì)初學(xué)者來說,有點(diǎn)困難。
ASIO是基本Boost開發(fā)的異步IO庫,封裝了Socket,簡化基于socket程序的開發(fā)。
最近分析ASIO的源代碼,讓我無不驚呀于它設(shè)計(jì)。在ACE中開發(fā)中的內(nèi)存管理一直讓人頭痛,ASIO的出現(xiàn),讓我看到新的曙光,成為我新的好伙伴。簡單地與ACE做個(gè)比較。
1.層次架構(gòu):
ACE底層是C風(fēng)格的OS適配層,上一層基于C++的wrap類,再上一層是一些框架(Accpetor, Connector,Reactor等),最上一層是框架上服務(wù)。
ASIO與之類似,底層是OS的適配層,上一層一些模板類,再上一層模板類的參數(shù)化(TCP/UDP),再上一層是服務(wù),它只有一種框架為io_service。
2.涉及范圍:
ACE包含了日志,IPC,線程,共享內(nèi)存,配置服務(wù)等。
ASIO只涉及到Socket,提供簡單的線程操作。
3.設(shè)計(jì)模式:
ACE主要應(yīng)用了Reactor,Proactor等。
而ASIO主要應(yīng)用了Proactor。
4.線程調(diào)度:
ACE的Reactor是單線程調(diào)度,Proactor支持多線程調(diào)度。
ASIO支持單線程與多線程調(diào)度。
5.事件分派處理:
ACE主要是注冊(cè)handler類,當(dāng)事件分派時(shí),調(diào)用其handler的虛掛勾函數(shù)。實(shí)現(xiàn)ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等類的虛函數(shù)。
ASIO是基于函數(shù)對(duì)象的hanlder事件分派。任何函數(shù)都可能成功hanlder,少了一堆虛表的維護(hù),調(diào)度上優(yōu)于ACE。
6.發(fā)布方式:
ACE是開源免費(fèi)的,不依賴于第3方庫, 一般應(yīng)用使用它時(shí),以動(dòng)態(tài)鏈接的方式發(fā)布動(dòng)態(tài)庫。
ASIO是開源免費(fèi)的,依賴Boost,應(yīng)用使用時(shí)只要include頭文件,不需動(dòng)態(tài)庫。
7.可移植性:
ACE支持多種平臺(tái),可移植性不存在問題,據(jù)說socket編程在linux下有不少bugs。
ASIO支持多種平臺(tái),可移植性不存在問題。
8.開發(fā)難度:
基于ACE開發(fā)應(yīng)用,對(duì)程序員要求比較高,要用好它,必須非常了解其框架。在其框架下開發(fā),往往new出一個(gè)對(duì)象,不知在什么地方釋放好。
基于ASIO開發(fā)應(yīng)用,要求程序員熟悉函數(shù)對(duì)象,函數(shù)指針,熟悉boost庫中的boost::bind。內(nèi)存管理控制方便。
我個(gè)人覺得,如果應(yīng)用socket編程,使用ASIO開發(fā)比較好,開發(fā)效率比較高。ACE適合于理論研究,它本來就是源于Douglas的學(xué)術(shù)研究。