提升asio async vs阻塞读取,udp速度/质量

时间:2009-07-27 14:47:44

标签: asynchronous udp boost-asio overlapped-io

我有一个快速而肮脏的概念验证应用程序,我在C#中编写,它从网络读取高数据速率多播UDP数据包。由于各种原因,完整的实现将用C ++编写,我正在考虑使用boost asio。 C#版本使用线程来使用阻塞读取来接收数据。如果计算机负载很重(通常在另一个线程中处理这些数据包),我在丢弃数据包时遇到了一些问题。

我想知道的是,如果boost中的async read操作(在Windows中使用重叠的io)将有助于确保我收到数据包和/或减少接收数据包所需的CPU时间。执行阻塞读取的单线程非常简单,使用异步读取似乎是复杂性的增加,但我认为如果它在高负载系统上提供更高的性能或丢弃更少的数据包将是值得的。目前数据速率不应高于60Mb / s。

1 个答案:

答案 0 :(得分:0)

我也使用boost::asio编写了一些多播处理代码。总的来说,根据我的经验,在asio中执行操作会增加许多复杂性,这可能会让您与其他人一起理解您最终编写的代码变得容易。

也就是说,大概是支持转移到asio而不是使用许多不同线程来完成工作的论点是你必须做更少的上下文切换。这在单核盒子上显然是正确的,但是当你走多核的时候呢?您是否计划将您收到的工作卸载到线程或只是让一个线程进行处理工作?如果你采用单线程方法,你最终可能会丢弃等待该线程处理工作的数据包。

最后是秋千和环形交叉路口。我想说你想要得到一些相当可靠的数据来支持你在这条路上走下去的论点,如果你打算这样做,只是因为它带来了所有增加的复杂性(对于一些人来说,我确定一个全新的范例) )。