このプログラムのスレッドモデル

いままでのスレッドモデル

今までの言語では、スレッドをプログラム内で自分で作成し、自分でコントロール するか、スレッド自体の作成は、完全に自動的に行われるようにするかのどちらかでした。

前者は、思い通りにスレッドを記述できましたが、時々スレッドセーフでないような処理を引き起こしてしまう時もあり、 スレッドセーフのチェックは、高度なスキルを要するものになりました。

後者は、安全でしたが、無駄なスレッドが発生する事が多く、パフォーマンスに影響を与えました。

Treeで採用するスレッドでは、それらの中間を目指します。スレッドを各処理の最小単位である関数単位に設定することができます。 そのスレッドモデルは、設定に基づいて、自動的に実行されます。

以下に、そのスレッドの設定です。

メインスレッド thred main 実行時に、最初に、存在するスレッドです。このスレッドは、無条件に唯一つ存在します。
独立スレッド thred independent 実行時に、スレッドを新しく作成する場合は、これを設定します。
継承スレッド thred inherit 実行時に、スレッドを継承元と共有します。この設定では、さらに継承元を指定することができます。 通常用いられる設定はthread inherit caller(呼び出し元のスレッドに従属)です。それ以外の継承元を指定する事も出来ます。
上記の設定とは独立に、次の設定を行うことができます。
thread type single 一つの処理に一つだけスレッドを作成します。同一の処理を2回実行した場合でも同じスレッドに実行要求が投げられます。
thread type multiple 一つの処理に複数のスレッドを作成します。同一の処理を2回実行した場合、別々のスレッドが作成されて、実行要求が投げられます。
各スレッドは、関数実行時に次のように処理します。