muduo 是基於 Reactor 模式的 C++ 網路庫,開發初衷非以高並發高吞吐為首要目標,但 ping-pong 測試驚人發現:muduo 吞吐量平均比 Boost.Asio 高 15% 以上。
測試環境與對象
- 硬體: DELL 490 工作站,雙路 Intel Xeon E5320 (8 核心),16GB 記憶體
- 系統: Ubuntu 10.04.1 LTS x86_64
- 編譯器: g++ 4.4.3,優化參數
-O2 -finline-limit=1000
- 測試對象: Boost.Asio 1.4.3/1.4.5、muduo 0.1.1
測試方法:Ping-Pong 協定
客戶端與伺服器雙向 Echo,資料像乒乓球在連接間來回傳送,測量吞吐量。訊息大小固定 16KB。測試腳本參考 Asio 官方效能測試。
測試項目
- 單執行緒測試: 並發連接數 1/10/100/1000/10000
- 多執行緒測試: 並發 100/1000,執行緒數 1/2/3/4(受限於 8 核心單機環境)
測試結果
單執行緒吞吐量(數值越大越好)

多執行緒吞吐量(100 並發)

多執行緒吞吐量(1000 並發)

結果分析與討論
- muduo 勝出主因: 簡單的設計與精簡的程式碼
- Asio 多執行緒表現不佳推測: 測試程式僅使用單一
io_service,若改用「每 CPU 一 io_service」架構效能應有提升
- 局限性: 作者對 Asio 了解有限,歡迎 Asio 專家提供優化版測試以利公平比較
開放邀請
Ping-Pong 測試易於實作,歡迎 ACE、POCO、libevent 等其他網路庫加入對比,期待各庫專家參與。