【发布时间】:2018-10-30 08:57:11
【问题描述】:
我在本地主机上使用 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,这有很大帮助,但还不够。
【问题讨论】:
-
慢有多慢?你测量了什么?
-
20,000 个请求在 658 毫秒内处理,即 30,396 个请求/秒(主要是 asio 读取和写入)。这并不可怕,但与每秒能够处理超过 66,000 个请求的 redis-benchmark 相比,我认为它可能会更好。
-
代码不处理请求。完全没有。你的意思是你在发送 redis请求吗?你怎么知道它什么时候被处理?发送了多少线程?很可能您只需要 1 个线程,并改用
async_操作。 -
redis req/sec 只是为了比较,我管理的根本不是完美的。我可以试试 async_ 操作,谢谢。
标签: c++ performance networking boost-asio