2009-07-27 141 views
0

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

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

回答

0

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

这就是说,大概赞成转移到asio而不是使用大量不同的线程来完成这项工作的论点是,你将不得不做更少的上下文切换。在单核盒子上显然是这样,但是当你使用多核心时呢?您是否计划将收到的工作卸载到线程中,或者只是让一个线程执行处理工作?如果你采用单线程的方式,你将会面临一种情况,你可能会丢弃等待该线程的数据包来处理工作。

最后它是摆动和回旋处。我想说,如果你打算这样做,你想要得到一些相当坚实的人物来支持你走下这条路的观点,只是因为它增加了所有复杂性(我确信一些人有一个全新的范例) )。

+0

这是一个可怕的答案... – snb 2017-06-22 17:01:25