繁体   English   中英

缓慢提升ASIO

[英]Boost ASIO slow

我在本地主机上使用Boost ASIO的性能似乎很慢。 我对每个数据发送/接收使用两次读/写:

boost::asio::write(socket, boost::asio::buffer((char*)&data_size_network_byte_order, sizeof(uint32)));
boost::asio::write(socket, boost::asio::buffer(results->get_data(), data_size));

原因是先发送数据的大小,然后发送数据本身。 这效率低下吗? 如果是这样,哪种方法更有效?

我已将no_delay设置为true,这很有帮助,但还不够。

首先,没有测量,您将无处可去。 您能证明它不必要地缓慢吗?

其次,请确保使用散布式聚集和ASIO提供的组合写入操作。 这样就消除了代码成为效率低下的根源,并且通常还消除了错误的余地。

在这种情况下

boost::asio::write(socket, boost::asio::buffer((char*)&data_size_network_byte_order, sizeof(uint32)));
boost::asio::write(socket, boost::asio::buffer(results->get_data(), data_size));

可能

演示

生活在Coliru

#include <boost/asio.hpp>

int main() {
    using namespace boost::asio;
    io_context io;
    ip::tcp::socket s(io);
    s.connect({{}, 6868});

    std::string buf1 = "hello", buf2 = "world";
    std::vector<const_buffer> bufs { buffer(buf1), buffer(buf2) };
    auto written = write(s, bufs);

    assert(written == buf1.size() + buf2.size());
}

这将发送“ helloworld”,如您从netcat的输出以及断言不会触发的事实所看到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM