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