2012-01-29 25 views
3

パイプとフィルタに関する質問はほとんどありません。パイプとフィルタ、明確化が必要

この例で

enter image description here

、実施されるとき、上記画像上に示されているように:

  1. 各パイプは、別のスレッドで実行されるべきか?
  2. 各フィルタは別のスレッドで実行する必要がありますか?
  3. ポンプは、それが見ている最初のパイプの「知っている」だけで、他の世界には何も知らないと言うのは公正でしょうか?さらに、各コンポーネントは、前と後のコンポーネントについてのみ「知っている」と言うのは公正でしょうか?言い換えれば

、フィルターは、それが拾うと、プロセス、その後だけにして1.次のパイプにし、2パス、それを処理するために準備ができてデータがあるかどうかをチェックしますか?

+2

フィルタは、すべて同じ契約(呼び出しと戻り)を持つことを除いて、実際には何も知らないため、透過的に交換できます(主に異なる結果オブジェクトをシンクに配信します)。 –

+0

@guido互換性に関する優れた点。コメントの代わりに質問に「回答」してください – JAM

答えて

4

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

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

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

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

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

  • ソフトウェアの例:ギターとアンプの間で音声信号を処理するのペダル・エフェクト:画像処理
  • 現実世界の例では、フィルタ。
関連する問題