evpp是360出品的一個網絡庫,基于libevent,進行了許多改造,對c++11友好。據稱比libevent性能要好。
到底有多好呢?360開發人員有自己的測試,信不信由你。
evpp源碼下有個httpecho示範,我把它改為hello,world的樣子:
void DefaultHandler(evpp::EventLoop* loop,
const evpp::http::ContextPtr& ctx,
const evpp::http::HTTPSendResponseCallback& cb) {
std::stringstream oss;
/*oss << "func=" << __FUNCTION__ << " OK"
<< " ip=" << ctx->remote_ip() << "\n"
<< " uri=" << ctx->uri() << "\n"
<< " body=" << ctx->body().ToString() << "\n";*/
oss <<"hello,world";
//ctx->AddResponseHeader("Content-Type", "application/octet-stream");
ctx->AddResponseHeader("Content-Type", "text/html;charset=UTF-8");
ctx->AddResponseHeader("Server", "evpp");
cb(oss.str());
}
然後設定線程數為4,比對我的筆記本。
build,運作下,端口在29099。
進而進行ab壓力測試:
分别是:
- ab -kc100 -n100000 http://127.0.0.1:29099/
- ab -kc500 -n100000 http://127.0.0.1:29099/
- ab -kc800 -n100000 http://127.0.0.1:29099/
- ab -kc1000 -n100000 http://127.0.0.1:29099/
前三個跑的比較好,最後一個基本跑不動,報
[warn] Error from accept() call: Too many open files
前三個的RPS保持在[29000,36000)區間,确實比libevent要好些。但絕對沒有360開發人員宣傳的那麼好:

該圖顯示evpp對多個網絡庫進行了對比。對此,我隻能說,其他庫本就沒有那麼好。
同樣的輸出,同樣的線程數,
mongols的測試資料都要優于evpp,RPS在[38000,42000)區間。如果使用單線程,mongols的RPS基本42000+。而且,mongols的記憶體占用僅僅為evpp的1/4。
一句話,不要迷信大廠!如圖:
重要的事情應該再說一遍:
不要迷信大廠!