从Beast.1.0.0-b66(使用Boost.1.64.0)迁移到Boost.1.67.0.Beast(即将Beast集成到Boost中)后,我观察到性能急剧下降(CPU消耗急剧增加)。 。毫无疑问,我做错了什么,但我无法想象。
什么是:
typedef beast::http::request<beast::http::string_body> BeastHttpRequest;
Run Code Online (Sandbox Code Playgroud)
就是现在:
namespace http = boost::beast::http;
typedef http::request<http::string_body> BeastHttpRequest;
Run Code Online (Sandbox Code Playgroud)
什么是:
beast::http::prepare(req);
beast::http::write(stream, req);
Run Code Online (Sandbox Code Playgroud)
就是现在:
req.prepare_payload();
http::write(stream, req);
Run Code Online (Sandbox Code Playgroud)
当然,我还必须进行许多API更改。例如:
req.fields.replace(hdrName, hdrValue);
Run Code Online (Sandbox Code Playgroud)
就是现在:
req.set(hdrName, hdrValue);
Run Code Online (Sandbox Code Playgroud)
该应用程序可以正常工作-包括SSL握手和代理协商-但我必须解决CPU消耗高峰和性能相应下降的问题。我想知道是否有人知道我忽略了一些明显的事情。
编辑:我应该提到我正在为SSL流使用flat_buffer。
我有机会分析“端口之前”和“端口之后”性能数据。这是“端口之前”(即良好的性能)调用链:
- 34.61% HttpRequest::send
- 32.02% beast::http::write<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&>, true, beast::http::string_body,
- 31.90% beast::http::write<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&>, true, beast::http::string_bo
- 20.77% beast::http::detail::write_preparation<true, beast::http::string_body, beast::http::basic_fields<std::allocator<char> > >::init
- 18.25% beast::http::detail::write_fields<beast::basic_streambuf<std::allocator<char> >, beast::http::basic_fields<std::allocator<char> > >
- 10.38% beast::write<beast::basic_streambuf<std::allocator<char> >, boost::basic_string_ref<char, std::char_traits<char> > >
- 10.20% beast::detail::write_dynabuf<beast::basic_streambuf<std::allocator<char> >, boost::basic_string_ref<char, std::char_traits<char> > >
+ 3.66% …Run Code Online (Sandbox Code Playgroud)