[英]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));
可能
#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.