gpt4 book ai didi

c++ - 提高 ASIO 慢

转载 作者:行者123 更新时间:2023-11-28 04:30:39 25 4
gpt4 key购买 nike

我在本地主机上使用 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));

可能是

演示

Live On 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 的输出以及断言未触发的事实中看到。

关于c++ - 提高 ASIO 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53060584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com