博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
muduo 与 boost asio 吞吐量对比
阅读量:6849 次
发布时间:2019-06-26

本文共 1323 字,大约阅读时间需要 4 分钟。

分类:
16362人阅读
(41)

 

目录

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

测试对象

  • boost 1.40 中的 asio 1.4.3
  • asio 1.4.5 ()
  • muduo 0.1.1 () 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 性能测试 的办法,用 ping pong 协议来测试吞吐量。

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

asio 的测试代码取自 ,未作更改。

muduo 的测试代码在 0.1.1 软件包内,路径为 examples/pingpong/,代码如 所示。

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 脚本可从 下载。

测试结果

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

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

转载地址:http://deeul.baihongyu.com/

你可能感兴趣的文章
淘宝的IP地址库
查看>>
ORACLE 建库过程总结
查看>>
Comparable与Comparator的区别(转载)
查看>>
我的友情链接
查看>>
window下从硬盘安装ubuntu双系统
查看>>
socket服务器与客户机的互动
查看>>
三种方法实现选项卡效果
查看>>
API网关(API Gateway)
查看>>
Zookeeper集群搭建和简单使用
查看>>
IntelliJ IDEA快捷键
查看>>
Xmanager 连接 AIX 系统
查看>>
java的锁机制
查看>>
如何避免项目管理黑洞-为什么要使用redmine
查看>>
[]+与[]表达式
查看>>
.Net平台下ActiveMQ入门实例
查看>>
C#语言获取控制面板“程序和功能”列表
查看>>
外网语音通信准备资料
查看>>
写字机器人开发之:python opencv linux下合作操作摄像头
查看>>
if-else选择结构
查看>>
一 网络概述 每天记录一点点
查看>>