2011-09-16 8 views
2

私は現在、いくつかのFutureを作成してBlockingQueueに入れるというタスクを達成するためにAkka(Java API /ライブラリ)を使用することを考えています。今度は、新しいスレッドを作成するか、新しいスレッドが利用可能になるのを待つのではなく、Callableによって処理されるいくつかのタスクが、呼び出しスレッドで高速/高速で実行されることがあります。Akka/future - Akkaは、現在のスレッドまたはディスパッチャを使用して "価値がある"かどうかを判断しますか?

Future<String> f1 = future(new Callable<String>() { 
        public String call() { 
         return "Hello" + "World"; 
        } 
       }); 

をそれは未来を呼び出し、現在のスレッド(コーラブル)で実行される可能性がありますか私は間違っている:私は実行している場合、私は、たとえば、アッカは、まさにこれをやっていると思いますか?新しいスレッドが作成されたかどうかをディスパッチャがどのように判断するのか分からないので、私は間違っているかもしれません。

今は他のスレッドを使用するExecutorServiceを使用していますが、実際には実際のスレッドで処理できるタスクもあるため、現在のスレッドで処理できる可能性があります。しかし私はBlockingQueue<Future<Float>>を使用しているので、時にはFutureを使用できないことがあります。

よろしく、
ヨハネス

答えて

2

誰が指定されていない場合、それは常に供給ディスパッチャ、またはグローバルなデフォルトから糸を使用しています。同じスレッドを使用するには、CallingThreadDispatcherを渡す必要がありますが、常に同期します。プログラマを除いて誰かが計算が安いかどうかを決める方法は全くありません。

+0

私は何とかCallingThreadDispatcherとehmの間で何とか動的に選択できますか?ツリー構造をたどり、各ノードの子孫数や他のものを計算します。したがって、最初の2つまたは3つのレベルでは、実際の計算を並行して行う価値があると仮定します。しかし、いくつかのケース(レベル> 2または少なくともリーフノード)では、何らかの形で現在のスレッドで実行される先物を作成できるといいでしょう。 BlockingQueueにFutureとnonfuturesを混在させることができないので、私は一種の「ジレンマ」に陥っています。 – Johannes

+1

Callable内で計算を行い、コンピューティングスレッドをDefaultCompletableFutureで再利用して自分で完成させますか? –

+0

'DefaultCompletableFuture'のJava API/Javadocのリファレンスが見つからない、またはチュートリアルのみが見つかりました: - /純粋なJava(1.7)でも実行可能かどうかは知っていますか?私はExecutorServiceなしでFutureを作成することはできないと思うので、私はとにかくチェックアウトしたいAkkaを使わなければならないかもしれません;-) – Johannes

関連する問題