c ++提升async_read性能

时间:2017-02-09 05:09:13

标签: c++ sockets boost tcp boost-asio

我第一次使用boost / asio库.. 这里有一些性能问题..请帮帮我.. 抱歉我的英语不好

我有一个tcp套接字客户端。和这些代码一样。

我使用相同的io_service初始化io_service,tcp :: socket,io_service :: strand。

class(boost::asio::io_service& io_service) 
 :io_service_(io_service), socket_(io_service), strand_(io_service) {}

以下是设置async_read的代码。

boost::asio::async_read(socket_,
        boost::asio::buffer(buffer_.data(), buffer_.header_size()), 
        strand_.wrap( boost::bind( &handle_recv_header, 
        shared_from_this(), 
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred) ));

和" handle_recv_header" FUNC

if ( !error && buffer_.decode_header() ){
    if ( !error && buffer_.decode_header() ){
        boost::asio::async_read(
        socket_,
        boost::asio::buffer(buffer_.data(), buffer_.body_size()),
        strand_.wrap(
        boost::bind(&handle_recv_body,
        shared_from_this(),
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred) ) );
    }}

问题是当我测试分发大小为(4~1000字节)

调用handle_recv_header花费将近0 ms 并且花费0.2(!!!!)秒来调用handle_recv_body

我无法理解为什么需要这么多时间来发送数据包? 我的代码有什么问题吗? 或者更好的方法来制作tcp-socket客户端?

我在堆栈溢出中发现了其他问题。 其中一个解决方案是 myPort->set_option(tcp::no_delay(true))但没有效果。

THX。

0 个答案:

没有答案