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