muduo 与 boost asio 吞吐量对比

muduo 与 boost asio 吞吐量对比

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

测试对象

测试环境

硬件: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 下载。

测试源码下载地址

测试结果

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

single_thread

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

multiple_thread_100conn

image007

测试结果表明 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 等)也能加入到对比中来,期待这些库的高手出马。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
muduo是一个基于Linux的C++网络库,它专注于高性能和可伸缩性。根据引用,muduo是在Linux操作系统上开发和编译的。因此,它不支持Windows操作系统。 muduo使用了一些Linux特定的系统调用和功能,如timerfd和eventfd,这些功能在Windows中是不可用的。另外,muduo使用了一些Linux特定的库和工具链,如g++编译器和CMake构建系统。 引用提到muduo适用于IA32(英特尔32位体系架构)、FreeBSD和Darwin操作系统,分别是基于Intel的32位架构、类UNIX操作系统和苹果的操作系统。Windows操作系统并不在这个列表中。 综上所述,由于muduo的特定设计和依赖于Linux操作系统的功能,Windows操作系统不支持muduo。如果你正在使用Windows系统,并且需要一个类似的网络库,你可以考虑其他适用于Windows的替代品,如Boost.Asio。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)](https://blog.csdn.net/qq_41453285/article/details/105104845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [muduo木铎学习(一)](https://blog.csdn.net/qq_36616692/article/details/88142811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值