2009-07-27 14 views
0

ネットワークからの高データレートのマルチキャストUDPパケットを読み取る、C#で書いた概念アプリの素早く汚れた証明があります。いろいろな理由から、完全な実装はC++で書かれており、boost asioの使用を検討しています。 C#バージョンでは、ブロッキング読み取りを使用してデータを受信するスレッドが使用されました。コンピュータの負荷が大きい(一般に、別のスレッドでこれらのパケットを処理している)場合、パケットが欠落したときに問題が発生しました。ブーストのasio asyncとブロッキングの読み取り、udpの速度/品質の比較

私が知りたいのは、ブースト(Windowsでオーバーラップされたioを使用)がパケットを受信したり、パケットを受信するのに必要なCPU時間を短縮するのに役立つかどうかです。非同期読み取りは、複雑さの中で一歩上がったように思えますが、高性能を提供したり負荷の重いシステムでパケット数を減らしたりすれば、価値があると思います。現在のところ、データ転送速度は60Mb/s以下でなければなりません。

答えて

0

boost::asioも使用して、マルチキャスト処理コードを記述しました。全体的に、私の経験では、asioで作業することに複雑さが増しているので、あなたが書いたコードを理解するために作業する他の人にとっては簡単ではないかもしれません。

つまり、おそらく多くの異なるスレッドを使用して作業を行うのではなく、asioに移動するほうが、コンテキスト切り替えが少なくて済むということです。これは、シングルコアのボックスではっきりしていますが、マルチコアになるとどうなりますか?あなたが受け取った作業をスレッドにオフロードする予定ですか、ただ1つのスレッドが処理作業をしているだけですか?シングルスレッドアプローチの場合は、そのスレッドが処理を待っているパケットをドロップできる状況に陥ることになります。

最終的には、スイングやラウンドアバウトです。私はあなたがそうするつもりならば、あなたがそうするつもりならば、このルートを下るためのあなたの主張を支持しているかなり堅実な数字を得たいと思うでしょう。それは、それが必要とするすべての複雑さのためです(私は確信している人にとって全く新しいパラダイム)。

+0

これは恐ろしい答えです... – snb

関連する問題