多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設計 > C++網絡通信庫性能大比拼

C++網絡通信庫性能大比拼

來源:程序員人生   發(fā)布時間:2016-03-24 08:58:27 閱讀次數(shù):9398次

C/C++網絡通訊庫有很多,本次benchmark的目的是為了公平的評估它們的網絡I/O性能,固然是作為REST server, 因此每一個server都寫了1些代碼,好在不是特別復雜。這個測試經過了好幾輪,本文給出了終究的結論。

先上結論,大家都忙:)

候選者:cppcms, boost asio, libevent, muduo和 nginx,nginx不是庫,這里做測試使用它作為基準,畢竟很多人心里,它是不可挑戰(zhàn)的。

結論:QPS的比拼結果,cppcms最弱,boost asio好很多,libevent好更多,nginx比libevent還要好點,muduo最好。

但是,不要小瞧這里最弱的cppcms,它仍可以輕易擊敗php, ruby, java, go, python, nodejs等語言編寫的rest server。

下面介紹測試的方法

測試工具:wrk

之前選用過apache的ab test工具,不要被名字騙了,和常說的ab test方法沒甚么關系。這是1個壓力測試工具,但是明顯不能將壓力升到最高,還是wrk效果最好。由于壓測的目標是,擊穿服務器,然后減少點壓力,找到能夠讓服務器網絡程序正常工作的最大壓力。

找測試工具的唯1標準就是能不能用足壓測客戶機器的資源,釋放最大的壓力。其他非C/C++的壓測工具也就直接謝絕了,這不是甚么開發(fā)效力至上的場合。

wrk -t4 -c200 -d60s "http://167serverip:serverport/collect?v=1"
wrk tool; 4 threads; 200 concurrency connection; duration 60s.

測試服務器

Table 1: benchmark env

Machine CPU Model MEM NETCARD(Gbps) OS
client  Intel(R) Xeon(R) CPU E5620 @2.40GHz 8 core 16G 1 CentOS release 6.5 (Final) x86_64
server  Intel(R) Xeon(R) CPU E5620 @2.40GHz 8 core 16G 1 CentOS release 6.5 (Final) x86_64




8核服務器,CentOS系統(tǒng)是樂視大運維同事優(yōu)化過內核的,性能應當超過下載下來的默許系統(tǒng)。測試服務器分成兩種,client負責發(fā)出http調用,server負責接受http要求,我們丈量的就是server成功處理的最大QPS.


網絡程序架構

都使用epoll,不過還是有差別,主要在多線程模型上。

Table 2: server architecture

Server Process Num Thread Num IO Pattern
cppcms_based 1 default threads = core*5 epoll one thread io_loop
asio_based 1 8 epoll io_loop-per-thread
muduo_based 1 8 epoll io_loop-per-thread
libevent_based 1 8 epoll io_loop-per-thread
nginx 8 worker 1 epoll one thread io_loop





測試結果

format: min/max/average

Table 3: benchmark result

Server Cpu Mem Disk Netcard(in/out) Requests/sec
libevent_based 684% / 768% / 756% 7276 / 9.9M / 8231 - - 104797 / 112025 / 111998
asio_based 302% / 357% / 309% 5522 / 5976 / 5743 - - 18971 / 19246 / 19163
cppcms_based 230% / 249% / 231% 9210 / 9428 / 9378 - - 15434 / 16391 / 15500
muduo_based 680% / 754% / 702% 6644 / 7332 / 6720 - - 286586 / 289423 / 287332
nginx 8*80% / 8*86 / 8*82 8*44M / 8*44M / 8*44M - - 112658 / 114127 / 113406


如果使用O3優(yōu)化選項, 發(fā)現(xiàn)對boost asio和muduo有較大提升。

Table 5: more details httpserver all versions benchmark

Server Compiler Optimization option Cpu Mem Disk Netcard(in/out) Requests/sec
cppcms_based clang++ 3.6.2 -O3 228% / 239% / 228% 9356 / 9416 / 9416 - - 14252 / 16124 / 15820
asio_based clang++ 3.6.2 -O3 300% / 305% / 303% 4368 / 4564 /4416 - - 33069 / 34247 / 33360
libevent_based clang++ 3.6.2 -O3 763% / 764% / 764% 5560 / 10M / 5520 - - 113373 / 114072 / 113713
muduo_based clang++ 3.6.2 -O3 650% / 694% / 658% 6272 / 6324 / 6312 - - 303202 / 307204 / 305839


其他測試結論

我們使用的是clang++編譯器和g++編譯器,優(yōu)化選項是O3, 發(fā)現(xiàn)兩個編譯器編譯出來的程序性能相當。

我們做了C++11和之前的C++03版本的對照,發(fā)現(xiàn)C++11略好過C++03。

還有很多輪測試,限于篇幅,不在這里描寫。


為何cppcms和boost asio性能不高?

由于mutex,對epoll使用最高效的方式在多線程里面每一個線程都調用epoll_wait,而這兩個庫都增加了mutex去鎖,致使性能低下。

mudoo性能特別高的緣由是它的設計只斟酌linux平臺,只把1個平臺的通訊庫做到極致,設計目的單純,因此能夠做到最好。

具體的緣由后面會專門發(fā)表文章剖析。今天先寫這么多。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线观看免费精品国自产 | 国产精品自拍第一页 | 呦视频在线一区二区三区 | 日产精品久久久一区二区 | 国产日韩网站 | 亚洲成av人片在线观看无码 | 在线中文字幕第一页 | 成人在线观看免费爱爱 | 最近免费中文字幕大全高清10 | 中文一区在线 | 91免费福利精品国产 | 国产成人综合久久精品亚洲 | 国产精品任我爽爆在线播放66 | 久久免费国产精品一区二区 | 手机在线成人精品视频网 | 国产视频一区二区 | 日本高清中文字幕一区二区三区a | 国产91一区二这在线播放 | 亚洲最大的黄色网址 | 91精品国产闺蜜国产在线闺蜜 | freexxx性韩国 | 野外xxxxfreexxxx自己 | 日本高清中文字幕一区二区三区a | yellow中文字幕官网是什么 | 久久亚洲精品一区成人 | 精品无码久久久久久久动漫 | 亚洲乱码一二三四区国产 | 在线观看中文字幕 | 国产亚洲综合一区在线 | xxxxxx国产对白 | 亚洲成人bt| 亚洲视频在线a视频 | 国产区图片区小说区亚洲区 | 亚洲精品短视频 | 久久www免费人成高清 | 龙口护士门91午夜国产在线 | 波多野结衣视频免费 | 老司机福利免费 | 欧美一级毛片无遮 | 99久久综合狠狠综合久久aⅴ | 少妇下面好紧好多水真爽播放 |