muduo 与 boost asio 吞吐量比拟
当前位置:以往代写 > C/C++ 教程 >muduo 与 boost asio 吞吐量比拟
2019-06-13

muduo 与 boost asio 吞吐量比拟

muduo 与 boost asio 吞吐量比拟

副标题#e#

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 与 boost asio 吞吐量相比


#p#副标题#e#

多线程测试的功效,数字越大越好:

muduo 与 boost asio 吞吐量相比

muduo 与 boost asio 吞吐量相比

测试功效表白 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 等)也能插手到比拟中 来,等候这些库的好手出马。

查察本栏目

    关键字:

在线提交作业