boost asio简单性能测试情况,优化求助
前段时间禁不住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还能否使用啊!