std.concurrency
これは低水準のメッセージ送受信APIで、この上に、より構造化あるいは制限された API を構築して使うことを目的としたものです。 基本コンセプトは、 メッセージのやりとりが可能な対象は全て共通のハンドル型 (この実装では Cid) で表現され、 これによって、メッセージを同一プロセス内のスレッドや、同一ホスト上のプロセス、 外部ホストのプロセスに同じインターフェイスで送ることができます。 これによって、 ほとんどあるいは全く実装を変更せずにプログラムを多数のマシンに分散させることが可能となり、 スケーラビリティの面で重要な特徴となります。 ただし現時点では同一プロセス内のスレッド間通信のみがサポートされ、 より特殊化されたハンドル Tid によって走査するようになっています。 これは、実質的に Cid のサブクラスで、プロセス内通信に特有の機能を追加しています。 Source:std/concurrency.d License:
Boost License 1.0. Authors:
Sean Kelly
- 論理プロセスを表現する、詳細を隠蔽した型です。
- 呼び出し元の Tid を返します。
- 新しい並行コンテキストで指定の関数を実行し、その Tid 返します。
呼び出しコンテキストは、新しいコンテキストの所有者となります。
所有者が終了した場合、OwnerTerminated メッセージが新コンテキストに送信され、
receive()
時に OwnerTerminated 例外が飛びます。
Parameters:
Returns:fn 実行したい関数 args 関数への引数
新しいコンテキストを表す Tid - 新しい並行コンテキストで指定の関数を実行し、その Tid 返します。
新しいコンテキストと呼び出しコンテキストは「リンク」されます。
この時、一方が終了すると LinkTerminated メッセージが他方に送信され、
receive() 時に LinkTerminated 例外が飛びます。
これに加えて、spawn() の時の関係も保持されます。
したがって、リンク関係が壊れたときは、
所有者の終了は、新コンテキストでの receive() 時の OwnerTerminated 例外として通知されます。
Parameters:
Returns:fn 実行したい関数 args 関数への引数
新しいコンテキストを表す Tid - 与えられた値を tid の指すコンテキストに送信します。
- メールボックスが満タンな時の挙動指定
- 空きができるまで待つ
- MailboxFull 例外を投げる
- 送信を止めてreturn
- メールボックスに保持可能なメッセージ数の最大値を指定します。
満タン時にメッセージが送られてきたときは
doThis に従って処理されます。
messages が 0 ならば、上限の制限をなくします。
Parameters:
Tid tid 上限を指定したいスレッドの Tid size_t messages 受け取るメッセージの上限、または無制限にしたいときは 0 OnCrowding doThis メールボックスが満タンな時の挙動 - メールボックスに保持可能なメッセージ数の最大値を指定します。
満タン時にメッセージが送られてきたときは
onCrowdingDoThis を呼び出します。messages が 0 ならば、上限の制限をなくします。
Parameters:
Tid tid 上限を指定したいスレッドの Tid size_t messages 受け取るメッセージの上限、または無制限にしたいときは 0 bool function(Tid) onCrowdingDoThis メールボックスが満タンな時に呼び出したいルーチン