c++通信框架
Boost.Asio使用入門
https://www.cnblogs.com/hanerfan/p/5161955.html
下面簡單地與ACE做個比較。
1、層次架構:
ACE底層是C風格的OS適配層,上一層基于C++的wrap類,再上一層是一些框架(Accpetor, Connector,Reactor,Proactor等),最上一層是框架上服務。
Boost.ASIO與之類似,底層是OS的適配層,上一層一些模板類,再上一層模板類的參數化(TCP/UDP),再上一層是服務,它只有一種框架為io_service。
livevent在不同的操作系統(tǒng)下,做了多路復用模型的抽象,可以選擇使用不同的模型,通過事件函數提供服務。
2、涉及范圍:
ACE包含了日志,IPC,線程池,共享內存,配置服務,遞歸鎖,定時器等。
ASIO只涉及到Socket,提供簡單的線程操作。
libevent只提供了簡單的網絡API的封裝, 線程池, 內存池, 遞歸鎖等均需要自己實現。
3、設計模式:
ACE主要應用了Reactor,Proactor等。
而ASIO主要應用了Proactor。
libevent為Reactor模式
4、線程調度:
ACE的Reactor是單線程調度,Proactor支持多線程調度。
ASIO支持單線程與多線程調度。
libevent的線程調度需要自己來注冊不同的事件句柄。
5、事件分派處理:
ACE主要是注冊handler類,當事件分派時,調用其handler的虛掛勾函數。實現ACE_Handler / ACE_Svc_Handler / ACE_Event_handler等類的虛函數。
ASIO是基于函數對象的hanlder事件分派。任何函數都可能成為hanlder,少了一堆虛表的維護,調度上優(yōu)于ACE。
libevent基于注冊的事件回調函數來實現事件分發(fā)。
6、發(fā)布方式:
ACE是開源免費的,不依賴于第3方庫, 一般應用使用它時,以動態(tài)鏈接的方式發(fā)布動態(tài)庫。
ASIO是開源免費的,依賴Boost,應用使用時只要include頭文件,不需動態(tài)庫。
libevent為開源免費的,一般編譯為靜態(tài)庫進行使用。
7、可移植性:
ACE支持多種平臺,可移植性不存在問題,據說socket編程在linux下有不少bugs。
ASIO支持多種平臺,可移植性不存在問題。
libevent主要支持linux平臺,freebsd平臺, 其他平臺下通過select模型進行支持, 效率不是太高。
8、開發(fā)難度:
基于ACE開發(fā)應用,對程序員要求比較高,要用好它,必須非常了解其框架。在其框架下開發(fā),往往new出一個對象,不知在什么地方釋放好。
基于ASIO開發(fā)應用,要求程序員熟悉函數對象,函數指針,熟悉boost庫中的boost::bind。內存管理控制方面。
基于libevent開發(fā)應用,相對容易, 具體大家可以參考memcached這個開源的應用,里面使用了libevent這個庫。
C++ 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。