有向グラフを介してさまざまな種類のデータを処理する単純なデータ分析ツールを設計します。有向グラフは、ユーザーがある程度カスタマイズできます。各ノードは、通過するデータに対するロギング、分析、および数学演算で構成されます。グラフは、各ノードで追加の処理を行うことを除いて、多くの点でニューラルネットワークに似ています。一部のノードは通過するデータ要素に対して単純な操作を行いますが、他のノードは複雑なアルゴリズムを備えています。
グラフから結果を最速かつ最も効率的な方法で取得できるように、この有向グラフで処理をマルチスレッド化するにはどうすればよいですか?ここではメモリは問題ではなく、このタスクの初期化にかかる時間も問題ではありません。
作業をマルチスレッド化するためのいくつかの異なる方法を考えました。
各スレッドインスタンスは、このグラフの開始ノードに入る各データ要素を「追跡」します。スレッドは、各ノードを通過するときにこのデータ要素にとどまり、ツリーの最後まで各ノードの処理メソッドを呼び出します。これには、基本的に、システムに入るデータ要素ごとに1つのスレッドが必要になります。もちろん、データ要素がシステム全体に渡されると、スレッドはリサイクルされます。ここでの問題は、ノードに2つの出力エッジが存在する場合です。つまり、スレッドは両方に従う必要があります(これは、スレッドプールから新しいスレッドをプルすることを意味しますか?)。
ノードごとにスレッドを作成し、各グラフの端にデータバッファーを作成します。ノード上のワーカースレッドは、1つのスレッドがデータを処理するのに時間がかかる場合に、データを保持するために継続的にチェックします。このアプローチの問題は、バッファの処理を開始するのに十分なデータを持つためのバッファの固有の「ポーリング」です。おそらく、グラフ構成のデータフローを単純化するために支払うわずかな代償です。
誰かがより良い方法を考えることができますか、またはあなたはどれをお勧めしますか?システム全体の待ち時間を最小限に抑え、受信データのストリームを常に処理する機能を探しています。
ありがとう!ブレット