みるく

  • プロセスは処理の基本単位を表す (プログラムの基本単位)
  • プロセスは、タスクもしくはサービスに分類される
  • タスクは、一連の入力に対して、コンテキストを共有する (非マルチスレッド)
  • サービスは、一連の入力に対して、コンテキストを共有しない (マルチスレッド)
  • プロセスは、入力と出力を持つ (引数と戻り値)
  • 入力と出力は、チャネルにより接続される (あるプロセスの戻り値は、他のプロセスの引数となる)
  • 出力に書き出されたデータは、チャネルで接続されている入力へとFIFOで伝播される (データの順序性は保たれる)
  • 複数のプロセスを一つにまとめて、複合プロセスとすることが出来る (関数みたいなもの)
  • 複合プロセス内のプロセスに、名前を付けることが出来る (変数?)
  • 複合プロセス内のプロセスに、空があっても良い (Javaでいうところのインターフェイス+後付オブジェクトができる:DI)
  • プロセスの実行順序は、自由に定義できる (正規順序、作用的順序)
  • 各プロセスは、実行可能かどうかを判断する基準が与えられる (入力にデータが揃ったとき、出力がデータを必要としたとき)
  • プロセスは、ファーストクラスオブジェクトになりうる
  • プロセスが、プロセスを出力し、かつ、プロセスの出力先が空のプロセスの場合、そのプロセスにかっちりとはまる (PCAで言うところのセルの書き換え)
  • プロセスは、Javaのクラスのメソッドを用いて記述される場合と、プロセスクラスを継承して記述される場合がある
  • メソッド記述を用いた場合、POJOを実現可能
  • プロセス間で使用するインスタンスを共有することで、データ共有を実現できる
  • プロセスクラスを継承した場合、インスタンスを共有することは出来ない
  • Contextインスタンスを共有することができるため、Contextインスタンスを用いて、データ共有可能
  • プロセスクラスを継承すると、入出力に関して、細かな制御が実現可能
  • データに対して、データトレーサを用いると、データの状況を追尾可能 (デバッグ用)
  • プロセスの入力と出力には、複数のチャネルを接続できる
  • 複数の入力に対しては、どれかのチャネルにデータが書き込まれた場合に、タスクが起動する
  • 複数の出力に対しては、全てのチャネルにデータを書き込む
  • サービスは、マルチスレッドで動作するが、最大並列度を定義することが出来る