轉帖兩篇關於ACE和boost::asio的文章

來源:互聯網
上載者:User
ACE與ASIO之間關於Socket編程的比較
轉自: FREE MY SOUL

ACE是一個很成熟的中介軟體產品,為自適應通訊環境,但它過於宏大,一堆的設計模式,架構是一層又一層,對初學者來說,有點困難。
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的學術研究。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.