Example17.3

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

17.3 フューチャー

フューチャー は、他のクライアントスレッドにおいて並列に計算される値であり、クライアントスレッドによっていつか使用されます。フューチャーは並行プロセスのリソースを有効に利用するために使います。典型的な使い方は次のようです。

 import scala.concurrent.ops._
 ...
 val x = future(someLengthyComputation)
 anotherLengthyComputation
 val y = f(x()) + g(x())

future メソッドはオブジェクト scala.concurrent.ops において、次のように定義されています。

 def future[A](p: => A): Unit => A = {
     val result = new SyncVar[A]
     fork { result.set(p) }
     (() => result.get)
 }

futureメソッドは、実行すべき計算 p をパラメータにとります。計算の型は任意であり、そのことは future の型パラメータ a によって表現されています。future メソッドでは計算結果を表すパラメータを取る、ガード result を定義します。つぎに、新しいスレッドを fork して、答えを計算し終了時に result ガードを起動します。このスレッドに並行して、関数 (訳注 : future) は型 A の無名関数を返します。この無名関数は、呼ばれたときに result ガードが起動されるまでウェイトし、そして、一度 result ガードが起動されると結果の引数を返します。同じ時に、関数は同じ引数で result ガードを再起動しますが、関数の future 起動は結果をすぐに返せます。


名前:
コメント:
最終更新:2011年02月24日 09:12
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。