天天看點

muduo 與 boost asio 吞吐量對比測試對象測試環境測試方法測試結果讨論

boost 1.40 中的 asio 1.4.3

硬體:DELL 490 工作站,雙路 Intel quad core Xeon E5320 CPU,16G 記憶體

作業系統:Ubuntu Linux Server 10.04.1 LTS x86_64

編譯器:g++ 4.4.3

簡單地說,ping pong 協定是用戶端和伺服器都實作 echo 協定。當 TCP 連接配接建立時,用戶端向伺服器發送一些資料,伺服器會 echo 回這些資料,然後用戶端再 echo 回伺服器。這些資料就會像乒乓球一樣在用戶端和伺服器之間來回傳送,直到有一方斷開連接配接為止。這是用來測試吞吐量的常用辦法。

muduo 和 asio 的優化編譯參數均為 -O2 -finline-limit=1000

$ BUILD_TYPE=release ./build.sh  # 編譯 muduo 的優化版本

我主要做了兩項測試:

單線程測試,測試并發連接配接數為 1/10/100/1000/10000 時的吞吐量。

多線程測試,并發連接配接數為 100 或 1000,伺服器和用戶端的線程數同時設為 1/2/3/4。(由于我家裡隻有一台 8 核機器,而且伺服器和用戶端運作在同一台機器上,線程數大于 4 沒有意義。)

單線程測試的結果,數字越大越好:

多線程測試的結果,數字越大越好:

測試結果表明 muduo 吞吐量平均比 asio 高 15% 以上。

muduo 出乎意料地比 asio 性能優越,我想主要得益于其簡單的設計和簡潔的代碼。

asio 在多線程測試中表現不佳,我猜測其主要原因是測試代碼隻使用了一個 io_service,如果改用“io_service per CPU”的話,性能應該有所提高。我對 asio 的了解程度僅限于能讀懂其代碼,希望能有 asio 高手編寫“io_service per CPU”的 ping pong 測試,以便與 muduo 做一個公平的比較。

ping pong 測試很容易實作,歡迎其他網絡庫(ACE、POCO、libevent 等)也能加入到對比中來,期待這些庫的高手出馬。

    本文轉自 陳碩  部落格園部落格,原文連結:http://www.cnblogs.com/Solstice/archive/2010/09/04/muduo_vs_asio.html,如需轉載請自行聯系原作者