muduo 與 libevent2 輸送量對比

來源:互聯網
上載者:User

libevent 是一款非常好用的 C 語言網路程式庫,它也採用 Reactor 模型,正好可以與 muduo 做一對 比。

本文用 ping pong 測試來對比 muduo 和 libevent2 的輸送量,測試結果表明 muduo 輸送量 平均比 libevent2 高 18% 以上,個別情況達到 70%。

測試對象

libevent 2.0.6-rc (http://monkey.org/~provos/libevent-2.0.6-rc.tar.gz)

muduo 0.1.1 (http://muduo.googlecode.com/files/muduo-0.1.1-alpha.tar.gz) SHA1 Checksum: a446ea8a22915f439063d2bc52eb2dc4b9caf92d

測試環境與測試方法

測試環境與前文《muduo 與 boost asio 輸送量對比》相同。

我自己編寫了 libevent2 的 ping pong 測試代碼,地址在 http://github.com/chenshuo/recipes/tree/master/pingpong/libevent/ 。由於這個測試代碼沒有使 用多線程,所以本次測試只對比單線程下的效能。

測試內容為:用戶端與伺服器運行在同一台 機器,均為單線程,測試並發串連數為 1/10/100/1000/10000 時的輸送量。

在同一台機器測試 輸送量的原因:

現在的 CPU 很快,即便是單線程單 TCP 串連也能把 Gigabit 乙太網路的頻寬跑滿。如果用兩台機器 ,所有的輸送量測試結果都將是 100 MiB/s,失去了對比的意義。(或許可以對比哪個庫占的 CPU 少 。)

在同一台機器上測試,可以在 CPU 資源相同的情況下,單純對比網路程式庫的效率。也就是說單線程下 ,服務端和用戶端各佔滿 1 個 CPU,比較哪個庫的輸送量高。

測試結果

單線程輸送量測試,數字越大越好:

以上結果讓人大跌眼鏡,muduo 居然比 libevent 快 70%!跟蹤 libevent2 的原始碼發現,它每次 最多從 socket 讀取 4096 位元組的資料 (證據在 buffer.c 的 evbuffer_read() 函數),怪不得輸送量 比 muduo 小很多。因為在這一測試中,muduo 每次讀取 16384 位元組,系統調用的性價比較高。

buffer.c:#define EVBUFFER_MAX_READ      4096

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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