この質問は数週間私を悩ませてきましたが、私はあまりにも急いで賢明な後知恵でそれに取り組むことができませんでした. 私は最終的に、彼の壊れやすい神経を和らげるために、その神経質な顧客に迅速で汚い解決策を提供しました(結果として、私のものも)。私は今、自由な心でこれを調べる時間をとっています。
基本的に、同期データ (時系列シリーズ) をできるだけ速く (<5ms) 処理するという課題に直面しています。順序付けされたスレッド プールや並列ワーカー キューを含むハイブリッド ソリューションなど、多くの Rube-Goldberg スタイルの設計をいじってみた後、徹底した実践的なベンチワークにより、単純な従来の方法に固執することが証明されました。シングル スレッド チェーン プロセスは、データの整合性とパフォーマンスの面で断然最良の選択でした。
ただし、アプリの下部のある時点で、これは特定の制限に達します。異なるプロセッサに並行してデータをブロードキャストする必要があります。そして、これが私の頭痛が再び始まるところです。データ ハブ (以下を参照) がプロセッサにデータを非同期で (スレッドとバイナリ リング バッファーを介して) 送信するようにすると、受信側でスクランブルされた順序で受信され、データの順序が崩れます。
そのため、データをすべてのプロセッサに並列に送信し、順序を正しく保つ方法を探しています。私の他の懸念は非同期性です。データハブのSendEvent
デリゲートがプロセスのReceive
メソッドによって単純な古典的な方法で (経由で+=
) サブスクライブされている場合、これはどのように動作しますか?
まず、サブスクリプションを「1 つずつ」と呼びたくありません。これを並列化する方法があると確信しています。2 つ目は、プロセッサ A が作業を完了するまでチェーン全体をロックしたくないということです。
ここにいるのは人々です。簡単に言うと、データが処理されるのを待たずにプロセッサにデータを送信し続ける賢明な方法を見つけたいと思っていますが、同時に、各データプロセッサが順序どおりにデータを受信する必要があります。これは互換性がないように聞こえるかもしれませんが、これを行うスマートで非常に簡単な方法があると確信しています (しかし、私はこれに深く入り込み、本当に混乱しました。そのため、善良な人々に助けを求めています)