通过击鼓传花程序来对比 muduo 与 libevent2 的事件处理效

前面我们比较了 muduo 和 libevent2 的吞吐量,得到的结论是 muduo 比 libevent2 快 18%。有 人会说,libevent2 并不是为高吞吐的应用场景而设计的,这样的比较不公平,胜之不武。为了公平起 见,这回我们用 libevent2 自带的性能测试程序(击鼓传花)来对比 muduo 和 libevent2 在高并发 情况下的 IO 事件处理效率。

测试对象

libevent 2.0.6-rc, 源代码包 http://monkey.org/~provos/libevent-2.0.6-rc.tar.gz  

muduo 0.1.2-alpha,源码 http://muduo.googlecode.com/files/muduo-0.1.2-alpha.tar.gz SHA1 Checksum: 9e7da4b46ad87602dd206eaedf54e67c17dfe4e1 。须编译为 release 版。

测试环境

测试用的软硬件环境与《muduo 与 boost asio 吞吐量对比》和《muduo 与 libevent2 吞吐量对比》相同,另外我还在自己的笔记本上运行了测试,结果也附在后面。

测 试内容

测试的场景是:有 1000 个人围成一圈,玩击鼓传花的游戏,一开始第 1 个人手里有花 ,他把花传给右手边的人,那个人再继续把花传给右手边的人,当花转手 100 次之后游戏停止,记录 从开始到结束的时间。

用程序表达是,有 1000 个网络连接 (socketpairs 或 pipes),数据在 这些连接中顺次传递,一开始往第 1 个连接里写 1 个字节,然后从这个连接的另一头读出这 1 个字 节,再写入第 2 个连接,然后读出来继续写到第 3 个连接,直到一共写了 100 次之后程序停止,记 录所用的时间。

以上是只有一个活动连接的场景,我们实际测试的是 100 个或 1000 个活动连 接(即 100 朵花或 1000 朵花,均匀分散在人群手中),而连接总数(即并发数)从 100 到 100,000 (十万)。注意每个连接是两个文件描述符,为了运行测试,需要调高每个进程能打开的文件数,比如设 为 256000。

libevent2 的测试代码位于 test/bench.c,我修复了 2.0.6-rc 版里的一个小 bug,修正后的代码见 http://github.com/chenshuo/recipes/blob/master/pingpong/libevent/bench.c

muduo 的测 试代码位于 examples/pingpong/bench.cc,见 http://gist.github.com/564985#file_pingpong_bench.cc

测试结果与讨论

第一轮,分 别用 100 个活动连接和 1000 个活动连接,无超时,读写 100 次,测试一次游戏的总时间(包含初始 化)和事件处理的时间(不包含注册 event watcher)随连接数(并发数)变化的情况。具体解释见 libev 的性能测试文档 http://libev.schmorp.de/bench.html ,不同之处在于我们不比较 timer event 的性能,只比较 IO event 的性能。对每个并发数,程序循环 25 次,刨去第一次的热身数据, 后 24 次算平均值。测试用的脚本在 http://github.com/chenshuo/recipes/blob/master/pingpong/libevent/run_bench.sh 。这个脚本是 libev 的作者 Marc Lehmann 写的,我略作改用,用于测试 muduo 和 libevent2。

第一轮的结 果,请先只看红线和绿线。红线是 libevent2 用的时间,绿线是 muduo 用的时间。数字越小越好。注 意这个图的横坐标是对数的,每一个数量级的取值点为 1, 2, 3, 4, 5, 6, 7.5, 10。

时间: 2016-04-03

通过击鼓传花程序来对比 muduo 与 libevent2 的事件处理效的相关文章

击鼓传花——轮询式错误处理机制的设计与实现

错误|错误处理|设计 击鼓传花--轮询式错误处理机制的设计与实现(一) -------------------------------------------------------------------------------- 摘要 本文简单介绍了一种轮询式错误处理机制的设计思想与具体实现,本机制可以灵活地实现对错误处理方式的扩充,以及对错误信息格式的自定义. -----------------------------------------------------------------

数据结构中要实现击鼓传花,请问是使用队列还是堆栈啊?具体的思路是什么

问题描述 数据结构中要实现击鼓传花,请问是使用队列还是堆栈啊?具体的思路是什么 数据结构中要实现击鼓传花,请问是使用队列还是堆栈啊?具体的思路是什么 解决方案 http://wenku.baidu.com/link?url=pvT9Ql4IqmdhnRlFLdTdeAS0sYf8oXSKNVJjaCkgGYhIBRFbiJUHueRVvoMqqFXz9enx75Iv-F39JVxaoqFs586rOfxggq_W3PD5BUcaA9a

严俊旭击鼓传花上瘾天顺风能匆忙上市为赶超泰胜

理财周报IPO实验室研究员 王薇薇/文 距泰胜风能(300129.SZ)10月19日上市还不到一个月,其竞争对手天顺风能(苏州)股份有限公司(下称天顺风能)也匆匆忙忙赶来,唯恐泰胜要抢去了天下一般. 说其匆忙实在不过,单是天顺风能在去年年底才变更设立股份制公司就足以说明.其的股权转让.增资等过程,都是临时抱佛脚之为. 严俊旭手里转悠5年,匆忙上市 一眼望去,天顺风能八个股东均为法人股东. 2005年1月18日,天顺(苏州)金属制品有限公司(下称天顺有限)以港资公司的身份成立,经营期限为1年.天顺

P2P项目真实性难考究 或玩“击鼓传花”

项目真实性难考究 P2P平台以每年4倍多的速度井喷,与此同时这一行业倒闭潮也在加速蔓延.据不完全统计,上半年以来已有超过50家网贷平台出现跑路,其中有九成以上都是开业运营时间不足一年的.P2P平台加速倒闭的背后凸显出"无门槛"."无监管"带来的后果. 新平台靠高收益吸客 但难有优质项目 动辄15%~20%的高收益率吸引了众多投资者前赴后继参与,甚至有上百万的高净值客户放弃银行理财与信托转投P2P.但记者发现,在宏观经济风险加大的背景下,大平台感叹优质项目资源&quo

P2P或玩“击鼓传花”借新还旧

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 项目真实性难考究 P2P平台以每年4倍多的速度井喷,与此同时这一行业倒闭潮也在加速蔓延.据不完全统计,上半年以来已有超过50家网贷平台出现跑路,其中有九成以上都是开业运营时间不足一年的.P2P平台加速倒闭的背后凸显出"无门槛"."无监管"带来的后果. 新平台靠高收益吸客 但难有优质项目 动辄15%~20

房市击鼓传花下一棒传谁

"虎头虎脑"."虎虎生威"."龙腾虎跃"是过节这些天的"高频词",一个"虎"字承载了人们对未来太多的期望与寄托,也将当下的年味烘托得勃勃有生气.但就在这个寓有冲劲的虎年里,对投机炒房客而言,却来了个下马威.年前创下飙长纪录的海南凤凰岛公寓,大年初一就出现出货潮,不少投资客开始打折抛房,甚至出现了低于前期市价一半的"甩货"房. 一个"国际旅游岛"的概念,吸引了来自全国甚

击鼓传花——轮询式错误处理机制的设计与实现(三)

错误|错误处理|设计 ErrHdlEventLogClass: 该类是将错误信息写入系统日志的具体实现类,该类继承自AbstractHandleClass.用户在自定义错误处理方式的时候,便可仿照该类来设计.具体代码如下: public class ErrHdlEventLogClass: AbstractHandleClass { public const int ID = 2; //错误处理方式的序号 public ErrHdlEventLogClass() { // // TODO: Ad

Instagram 10亿美元估值背后:风投击鼓传花

新浪科技 郑峻 发自美国硅谷 新浪科技讯 北京时间4月10日消息, Facebook今晨宣布以现金加股票的方式斥资 10亿美元收购图片社交应用Instagram.而就在上周,媒体报道Instagram即将完成5000万美元的第二轮融资,公司估值为5亿美元.一周之内, Instagram估值翻了一倍.除了Instagram的创业团队,风投的投资也在数日之内实现了不可思议的增长. 红杉资本牵头了Instagram这轮投资,而据AllThingsD报道,俄罗斯投资大亨尤里·米尔纳(Yuri Milne

muduo 与 libevent2 吞吐量对比

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: