0

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

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

4

1 回答 1

0

我还使用编写了一些多播处理代码boost::asio。我想说的是,总体而言,根据我的经验,做事情会增加很多复杂性,asio因为这可能会使与您一起工作的其他人不容易理解您最终编写的代码。

话虽如此,可能支持移动到asio而不是使用许多不同的线程来完成工作的论点是您将不得不做更少的上下文切换。这在单核机器上显然是正确的,但是当你使用多核时呢?您是打算将收到的工作卸载到线程还是只让一个线程来完成处理工作?如果您采用单线程方法,您最终会遇到这样的情况:您可能会丢弃等待该线程处理工作的数据包。

最后是秋千和环形交叉路口。如果你打算这样做的话,我想说你想得到一些相当可靠的数据来支持你走这条路的论点,只是因为它所带来的所有额外的复杂性(我敢肯定,对于某些人来说,这是一个全新的范式)。

于 2009-07-27T14:53:36.917 回答