Pipeline(software)

パイプラインは、多くの場合、プロセスと同時にすべての要素を起動し、アップストリームプロセスによって書き込まれたデータを各プロセス このようにして、cpuはスケジューラによってプロセス間で自然に切り替えられ、アイドル時間を最小限に抑えることができます。 他の一般的なモデルでは、要素は軽量スレッドまたはコルーチンとして実装され、プロセスに頻繁に関与するOSのオーバーヘッドを削減します。 OSによっては、スレッドはOSまたはスレッドマネージャによって直接スケジュールされる場合があります。 コルーチンは、常に何らかの形のコルーチンマネージャによってスケジュールされます。

通常、読み取り要求と書き込み要求は操作をブロックしているため、書き込み時にソースプロセスの実行は、すべてのデータが宛先プロセスに書 これは、二つのプロセスの少なくとも一方がすぐにオペレーティングシステムによってその要求を処理し、実行を継続するため、両方のプロセスが無期限にお互いが応答するのを待つデッドロックにつながることはできません。

パフォーマンスのために、パイプを実装するほとんどのオペレーティングシステムはパイプバッファを使用し、ソースプロセスは宛先プロセスが現在 ほとんどのUnicesやUnixライクなオペレーティングシステムでは、潜在的にはるかに大きく、設定可能なサイズのパイプバッファを実装する特別なコマンドも利用可能であり、一般的には”バッファ”と呼ばれる。 このコマンドは、宛先プロセスがソースプロセスよりも大幅に遅い場合に便利ですが、ソースプロセスができるだけ早くタスクを完了できることが望 例えば、ソースプロセスは、CDからオーディオトラックを読み取るコマンドで構成され、宛先プロセスは、MP3のような形式に波形オーディオデータを圧縮す この場合、パイプバッファ内のトラック全体をバッファリングすると、CDドライブがより迅速にスピンダウンすることができ、エンコード処理が完了す

このようなバッファコマンドは、データの読み書きのためのシステムコールを使用して実装できます。 Poll、select、multithreadingなどの機能を使用することで、無駄なビジー待機を回避できます。

パイプラインソフトウェアシステムのいくつかの注目すべき例は次のとおりです。

  • RaftLib–C/C++Apache2.0License

コメントを残す

メールアドレスが公開されることはありません。