首页IT科技boost asio buffer(muduo 与 boost asio 吞吐量对比)

boost asio buffer(muduo 与 boost asio 吞吐量对比)

时间2025-09-10 20:04:56分类IT科技浏览6872
导读:分类: muduo c++ 2010-09-04 16:24 16362人阅读 评论(41 收藏 举报 目录(?...

分类:

muduo

c++

2010-09-04 16:24 16362人阅读 评论(41) 收藏 举报

目录(?)[+]

测试对象 测试环境 测试方法 测试结果 讨论

muduo (http://code.google.com/p/muduo) 是一个基于 Reactor 模式的 C++ 网络库                ,我在编写它的时候并没有以高并发高吞吐为主要目标                           ,但出乎我的意料          ,ping pong 测试表明            ,muduo 吞吐量比 boost.asio 高 15% 以上                   。

测试对象

boost 1.40 中的 asio 1.4.3 asio 1.4.5 (http://think-async.com/Asio/Download) muduo 0.1.1 (http://muduo.googlecode.com/files/muduo-0.1.1-alpha.tar.gz) SHA1 Checksum: a446ea8a22915f439063d2bc52eb2dc4b9caf92d

测试环境

硬件:DELL 490 工作站                          ,双路 Intel quad core Xeon E5320 CPU               ,16G 内存

操作系统:Ubuntu Linux Server 10.04.1 LTS x86_64

编译器:g++ 4.4.3

测试方法

依据 asio 性能测试 http://think-async.com/Asio/LinuxPerformanceImprovements 的办法        ,用 ping pong 协议来测试吞吐量                          。

简单地说                         ,ping pong 协议是客户端和服务器都实现 echo 协议        。当 TCP 连接建立时                    ,客户端向服务器发送一些数据    ,服务器会 echo 回这些数据                        ,然后客户端再 echo 回服务器              。这些数据就会像乒乓球一样在客户端和服务器之间来回传送                        ,直到有一方断开连接为止                           。这是用来测试吞吐量的常用办法            。

asio 的测试代码取自 http://asio.cvs.sourceforge.net/viewvc/asio/asio/src/tests/performance/ ,未作更改         。

muduo 的测试代码在 0.1.1 软件包内                    ,路径为 examples/pingpong/                            ,代码如 http://gist.github.com/564985 所示                            。

muduo 和 asio 的优化编译参数均为 -O2 -finline-limit=1000

$ BUILD_TYPE=release ./build.sh # 编译 muduo 的优化版本

我主要做了两项测试:

单线程测试     ,测试并发连接数为 1/10/100/1000/10000 时的吞吐量                。 多线程测试                ,并发连接数为 100 或 1000                           ,服务器和客户端的线程数同时设为 1/2/3/4    。(由于我家里只有一台 8 核机器          ,而且服务器和客户端运行在同一台机器上            ,线程数大于 4 没有意义                            。)

所有测试中                          ,ping pong 消息的大小均为 16k bytes                    。测试用的 shell 脚本可从 http://gist.github.com/564985 下载。

测试结果

单线程测试的结果               ,数字越大越好:

多线程测试的结果        ,数字越大越好:

测试结果表明 muduo 吞吐量平均比 asio 高 15% 以上                        。

讨论

muduo 出乎意料地比 asio 性能优越                         ,我想主要得益于其简单的设计和简洁的代码                         。

asio 在多线程测试中表现不佳                    ,我猜测其主要原因是测试代码只使用了一个 io_service    ,如果改用“io_service per CPU                ”的话                        ,性能应该有所提高    。我对 asio 的了解程度仅限于能读懂其代码                        ,希望能有 asio 高手编写“io_service per CPU                           ”的 ping pong 测试,以便与 muduo 做一个公平的比较                   。

ping pong 测试很容易实现                    ,欢迎其他网络库(ACE                、POCO                           、libevent 等)也能加入到对比中来                            ,期待这些库的高手出马                          。

声明:本站所有文章     ,如无特殊说明或标注                ,均为本站原创发布        。任何个人或组织                           ,在未征得本站同意时          ,禁止复制          、盗用            、采集                          、发布本站内容到任何网站               、书籍等各类媒体平台              。如若本站内容侵犯了原著者的合法权益            ,可联系我们进行处理                           。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
海洋cms app(免费下载安装海洋CMS模板,打造专业网站) 怎么用华为手机助手连接手机和电脑(华为手机助手怎么成功连接手机_华为手机助手连接电脑没反应是怎么回事)