boost asio简单性能测试情况,优化求助

doboto 2012-12-22 10:23:47
前段时间禁不住boost的诱惑,使用了boost asio进行异步通信完成一个项目,发现CPU利用率偏高,为求证,做了一个简单测试,代码如下:

#include "stdafx.h"

#include <boost/asio.hpp>
#include <boost/bind.hpp>

using boost::asio::ip::udp;
using namespace boost::asio;

const char bufdata[13360] = "";

void handle_send_data(ip::udp::socket* sock, udp::endpoint *ep)
{
sock->async_send_to(buffer(bufdata, 1336), *ep, boost::bind(handle_send_data, sock, ep));
}

#define USE_ASYNC_IO

int _tmain(int argc, _TCHAR* argv[])
{
boost::asio::io_service ios;
ip::udp::socket m_udp_sock(ios, udp::endpoint(udp::v4(), 0));

udp::endpoint dest_ep(boost::asio::ip::address_v4::from_string("192.168.1.16"), 8000);

#ifdef USE_ASYNC_IO
while(true) {
m_udp_sock.send_to(buffer(bufdata, 1336), dest_ep);
}
#endif //USE_ASYNC_IO

m_udp_sock.async_send_to(buffer(bufdata, 1336), dest_ep, boost::bind(handle_send_data, &m_udp_sock, &dest_ep));

ios.run();

return 0;
}

上面这段代码主要测试和比较boost asio同步和异步处理的性能比较,采用单线程不停循环的模式发送一些udp数据到目的地址,这是一个最简单的asio数据处理功能。如果开启了USE_ASYNC_IO时,使用异步发送模式,否则使用同步方式发送数据。

在2.5G双核, 100M网卡机器上运行时,大致数据如下:
同步模式:网卡吞吐率 70M左右, CPU利用率 8-14%
异步模式:网卡吞吐率 70M左右, CPU利用率 15%-25%

结论,无论是采用同步处理还是异步处理,网络吞吐率都差不多,但是异步模式下, CPU利用率几乎快到同步模式下的两倍。
但是按道理异步模式应该比同步模式效率更高啊,这么简单的测试,难道程序有问题,请那位高手指点一二!
实际使用时,如何降低boost带来CPU消耗高的问题?否则这boost还能否使用啊!

...全文
193 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧