ステージ

ステージはパイプライン中に現れる各処理としています。
ステージにはいくつかの種類に分けられます。

  • データを抽出するステージ
    • データを登録するステージ
    • データを加工するステージ
      • ソート
      • マージ
      • フィルタ
  • その他特殊なステージ
    • ロードバランス
    • ステージをまとめて一つのステージにするステージ

今考えているのはこんなところです。
もちろんステージの中にはパイプラインとして動かすのは難しいものもあります。例えばソートなんかは一度すべてのデータが蓄えられないといけないので、そういうのをステージとする場合は注意が必要でしょうね。ただソートステージはそれ自体が分割統治なんかで動くと面白いかなと思いますが、現段階ではやらないでおきます。

またステージは送信キューと受信キューを持っていて、送信キューは0〜*まで登録できます。つまりデータを登録するという終端をあらわすステージから、複数のステージへデータを渡すものまであるということです。
受信キューも同様で0〜*まで登録できます。ただし、2以上受信キューがある場合はマージ処理が入るはず?なので並列を阻害してしまう場合もあるので注意が必要です。

その他特殊なステージで挙げてあるもは、普通のステージとはちょい違った感じを考えています。
ロードバランスステージは、データ並列を可能とするステージです。外部Webサービスへの登録など並列化したほうが良い処理などはこれを利用してN個のWebサービス用ステージを作り、並列処理を行えるようにします。
ステージをまとめて一つのステージにするステージは、更に特殊です。例えばステージの受信キューが一つであるような処理が並んでいる場合、各データ毎に処理を行うことが想定されます。そんなものがたくさん並んでそれぞれスレッドを持っているのはなんだかなーって時にはそれらを一つにまとめて1スレッドで処理させたくなるでしょう。そういう場合に使います。また、これを利用すればステージ毎の負荷を均等にすることも場合によってはできるので、パイプライン並列を最適化するのにも使えるんじゃないでしょうか。でも、これを実装するのはちょっと先になるかもしれません。ちなみにこれを仮にワークユニットとしています。そして実際のスレッドに紐付けているのはワーカーです。

と、ここまで書いて眠いので、また気が向いたら書いていきます。