小编jbt*_*hie的帖子

如何提高 Boost ASIO、UDP 客户端应用程序的吞吐量

我正在使用 Boost ASIO 库来实现需要具有高吞吐量的 Windows UDP 客户端。

我想使用异步接收调用,以便我最终可以实现接收超时,即。一段时间后,如果没有收到数据报,我的应用程序将退出。

我的问题是,我发现使用同步接收与异步接收相比,数据吞吐量提高了 30%。我在多个 Dell R630、R710 Windows 2008 服务器甚至我的联想 ThinkPad 笔记本电脑上运行应用程序时发现了这个问题。

下面两个代码段之间的主要性能差异是什么?ioService.run_one()每次异步接收后调用是否有更多开销?我是 Boost 库的新用户,所以任何帮助将不胜感激!

同步接收:

socket_->receive_from(boost::asio::buffer(&vector_[0], datagramSize),  
                      endPoint_);
Run Code Online (Sandbox Code Playgroud)

对比

异步接收(带阻塞):

err = boost::asio::error::would_block;

socket_->async_receive_from(
    boost::asio::mutable_buffers_1(&vector_[0], datagramSize),
    endPoint_,
    boost::bind(&HandleRead, _1, _2, &err, &bytesReceived));

do
{
    ioService_.run_one()
}
while(err == boost::asio::error::would_block)
Run Code Online (Sandbox Code Playgroud)

异步接收处理函数:

static void HandleRead
(
    const boost::system::error_code& error, 
    std::size_t bytesRead,
    boost::system::error_code* outError, 
    std::size_t* outBytesRead
)
{
    *outError = error;
    *outBytesRead = bytesRead;
}
Run Code Online (Sandbox Code Playgroud)

c++ boost asynchronous udp synchronous

5
推荐指数
1
解决办法
1347
查看次数

标签 统计

asynchronous ×1

boost ×1

c++ ×1

synchronous ×1

udp ×1