首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

擊鼓傳花測試對比 muduo 與 libevent2 事件處理效能

     編輯:關於C++

為公平比較事件處理效率(非吞吐量),採用 libevent2 自帶的效能測試程式「擊鼓傳花」對比 muduo 與 libevent2 在高並發下的 I/O 事件處理能力。

測試場景

  • 1000 個連接 (socketpair/pipe) 形成環狀
  • 資料在連接間順序傳遞:寫 1 位元組 → 讀出 → 寫入下一連接
  • 100 次傳遞後停止,記錄總耗時
  • 活動連接數:100 或 1000;總並發連接數:100 到 100,000
  • 需調高檔案描述符限制 (如 256000)

測試程式

  • libevent2:修正 2.0.6-rc 小 bug 的 bench.c
  • muduo:examples/pingpong/bench.cc
  • 測試腳本:參考 libev 作者 Marc Lehmann 版本修改

第一輪測試結果

第一輪測試結果圖表

紅線=libevent2,**綠線**=muduo,數值越小越好。橫座標為對數刻度。

關鍵發現

  1. 初始化階段: libevent2 比 muduo 快 20%(左側圖表)
  2. 事件處理階段: (右側圖表)
    • 100 活動連接:並發 <1000 時持平;>30000 muduo 領先;1000-30000 libevent2 領先
    • 1000 活動連接:並發 <10000 持平;>10000 muduo 明顯領先

原因分析:epoll_ctl ADD vs MOD

前 24 輪熱身後:

  • muduo 使用 EPOLL_CTL_MOD 更新既有 watcher
  • libevent2 繼續用 EPOLL_CTL_ADD 重複添加並忽略 EEXIST 錯誤

EPOLL_CTL_ADD 重複添加快速失敗,MOD 需做更多工作較慢。libevent2 因此在初始化「撿便宜」。

第二輪驗證:muduo 改用 ADD 模式

藍線**=修改後 muduo(圖表中)。初始化效能超越 libevent2,事件處理耗時也降低(推測核心內部機制)。此修改僅為驗證,未併入正式版本。

筆記本環境複現(雙核 2.4GHz)

筆記本測試結果

趨勢一致。

結論

事件處理效率方面,muduo 與 libevent2 總體接近、各擅勝場。並發量極大 (>10k) 時 muduo 略佔優勢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved