4

パイプとフィルターに関するいくつかの質問。

ここに画像の説明を入力

この例では、上の画像に示されているように、実装すると次のようになります。

  1. 各パイプは個別のスレッドで実行する必要がありますか?
  2. 各フィルターを個別のスレッドで実行する必要がありますか?
  3. Pump は最初に見た Pipe だけを「知っており」、他の世界には何も知らないと言っても過言ではないでしょうか? さらに、各コンポーネントは前後のコンポーネントについてのみ「認識」していると言っても過言ではありませんか?

言い換えると、フィルターは、取得して処理する準備ができているデータがあるかどうかを確認し、その後、1. データを処理し、2. 次のパイプに渡すかどうかを確認します。

4

1 に答える 1

5

パイプとフィルターは、モジュール性を使用して、実装の容易さと、関連するモジュールの構成による汎用性を目的とした、divide-et-imperaのアプリケーションです。

これは、ソース ストリーム、オブジェクト、または信号の複数の処理実行を含む問題を解決するときに最も有用であり、同じタイプの変更されたストリーム、オブジェクト、または信号の生成を要求します。

これはfilterと呼ばれる単純な小さな処理ユニットに基づいており、それらはすべて同じコントラクトに従います (入力で同じオブジェクト/ストリーム タイプとオプションのパラメーターを取得し、処理されたストリーム/オブジェクトを返します)。各フィルター入力は、(別の、またはそれ自体の別のインスタンス) フィルター出力、またはソース ( pumpと呼ばれる) に接続できます。同様に、各フィルター出力は、フィルター入力またはアーキテクチャの戻りオブジェクト/スチーム (と呼ばれる) に接続できます。シンク)。接続ユニットはパイプと呼ばれ、フィルターで行われる処理のさまざまなステップを介してストリーム/オブジェクト/シグナルをルーティングするためにマネージャー クラスによって使用されます。

コントラクトを指定する際の取り決めは、他のフィルターやフロー処理全体について他に何も知らなくても、各フィルターが自律的に動作できることです。つまり、フィルターを透過的に交換して、異なる最終結果を生成することもできます。

フィルター インスタンスは異なるストリームで同時に実行できますが、通常、パイプとフィルター パターンは同時操作には使用されません。これは、各フィルターがほとんど同じリソースへのアクセスを必要とするためです。

  • ソフトウェアの例: 画像処理のフィルター
  • 実際の例: ギターとアンプの間のサウンド信号を処理するペダル エフェクト。
于 2012-01-29T04:46:28.250 に答える