問題タブ [future]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Future-Instance のリスト
Future-Instances のリストをよりパフォーマンスの高いものに置き換えたいと思います。現在、ツリーをトラバースし、 Callable を送信して、ツリー内の各ノードの子孫ノードまたは自己ノードの数を決定しています。Future インスタンスをリストに保存し、必要に応じてリストから適切なノード数を取得します。
残念なことに、List を使用している軸は、すべての Future インスタンスが送信されるまで待機する必要があります。さらに、メインメモリの制限を超えてスケーリングしません:-/
おそらく、Google Guava と ListenableFuture を使用するのが適切でしょう。
編集:Futureが起動されるたびにFutureがリストに追加されるPropertyChangeListenerで実際に何かを構築すると思います。次に、CountDownLatch を 1 に設定し、リストに新しい Future が追加されるたびに countDown() を呼び出します。何かのようなもの:
次に doHasNext() で:
そしてリスナー:
それが機能するかどうかはわかりませんが、手遅れであり、CountDownLatch の使用方法を信用していません (上記のコードをテストしていません)。
編集:誰かが興味を持っている場合に備えて。CountDownLatch と List の代わりに、BlockingQueue を PropertyChangeListener の実装と組み合わせて使用しました。これは、優れた「クリーンな」ソリューションのようです。
よろしく、
ヨハネス
java - Akka /先物 -- Akka は、現在のスレッドまたはディスパッチャを使用して「価値がある」かどうかを判断しますか?
現在、Akka (Java API/ライブラリ) を使用して、複数Future
の を作成し、BlockingQueue
. Callables によって処理される一部のタスクは、新しい Thread を作成したり、新しい Thread が使用可能になるのを待ったりする代わりに、呼び出しスレッドで実行する方が高速である可能性があります。たとえば、実行している場合、Akkaはまさにこれを行っていると思います:
future(Callable) を呼び出す現在のスレッドで実行される可能性がありますか、それとも間違っていますか? 新しいスレッドが作成されたかどうかをディスパッチャーがどのように判断するかがわからないため、間違っている可能性があります。
現在、私は他のスレッドを使用する ExecutorService を使用していますが、一部のタスクは非常に高速であるため、現在のスレッドで処理することもできます。しかし、私は a を使用してBlockingQueue<Future<Float>>
いるため、 s を使用できない場合と使用できない場合がありますFuture
。
よろしく、
ヨハネス
c++ - パラメータを使用して packaged_task を作成するにはどうすればよいですか?
futures、promise、およびパッケージ化されたタスクに関するこの優れたチュートリアルに従って、自分のタスクを準備したいと思うようになりました。
gcc-4.7.0 エラーメッセージを解読できる限り、引数が異なると予想されますか? しかし、どのように?エラーメッセージを短くしようとしました:
私のバリアントは、パラメーターをackermann
間違って提供する方法ですか? それとも間違ったテンプレートパラメータですか? 3,11
スレッドの作成にパラメータを与えませんよね?
失敗した他のバリアントを更新します。
うーん...それは私ですか、それともbeta-gccですか?
java - future.getは、キャンセル時にCallableで最終的に実行される前に戻ります
フューチャーがキャンセルされたときに、Callableでfinallyブロックが実行される前に、future.get呼び出しが返される場合に断続的に失敗するテストがあります。基本的なワークフローは次のとおりです。
future.cancel(true);
私はInterrupedException
投げられたのを見るCallable
メインスレッドは呼び出しCancellationException
からキャッチしますfuture.get
今Callable
呼び出しfinally
。
テストは私のノートブックでは常に成功し、ビルドサーバーではほとんどの場合失敗します。私のノートブックとビルドサーバーの両方がOpenJDK1.7を実行しています。何か案は?
scala - リストの並列化に akka フューチャーとアクターを使用する
メッセージのリストをアクターに送信し、将来すぐに返信を受け取り、すべての先物が完了するのを待ってから呼び出し元のメソッドに戻りたいと考えています。akka docs を読むと、Future.sequence が最適だと思いますが、次のコードを正しく動作させることができませんでした。コンパイラから次のエラーが表示されます。
明らかな何かが欠けていると確信していますが、例と API ドキュメントによると、以下のコードは「正しい」ようです。
一連のメッセージをアクターに送信し、未来を受け取り、すべての未来が完了したら戻る正しい方法は何ですか (オプションで、各未来からの結果をリストに保存して返す)。
scala - Scala のアクターのグループで最初に完了したアクターを取得するにはどうすればよいですか?
適度な数の長期実行アクターがあり、完了した最初のアクターを返す同期関数を書きたいと考えています。先物のスピン待機でそれを行うことができます(例:
)、しかしそれは非常に「俳優らしくない」ようです
このscala.actors.Futures
クラスには 2 つのメソッドが awaitAll()
ありawaitEither()
、非常に近いように見えます。もしあれば、awaitAny()
私はそれに飛びつきます。これを行う簡単な方法がありませんか、それとも適用可能な一般的なパターンはありますか?
nhibernate - ToRowCountQueryはグループ化を無視しているようです
通常のクエリからrowcount-queryを作成しようとしていますが、結果のSQLにGROUP BYがないため、カウントが間違っているようです。誰かが私が間違っていることを知っていますか?
最初のクエリ:
結果のSQL:
では、rowcount-queryのGROUP BYはどこにありますか?
UPDATE 結局のところ、ToRowCountQueryは、元のクエリから選択とグループ化を取り除きます。では、どうすればこのようなことができますか?
Firoの答えは正しい方向への一歩のようですが、選択リストに示されている最小/最大フィールドを含むすべてのフィールドのカウントが必要なため、CountDistinctを使用できません。その次に、CountDistinctは引数としてIProjectionを取りません:
更新2
フィロの答えのリンクに基づいて、私はこの代替案を思いついた。query
切り離されたQueryOverオブジェクトになるように変更しました。次に、私はこれを試しました:
ただし、これによりArgumentOutOfRangeException
:
scala - Akka を使用して fork および join
問題文: 並行して処理する必要がある証券のポートフォリオがあります。Java では、スレッドプールを使用して各セキュリティを処理し、ラッチを使用してカウントダウンを行いました。完了したら、マージなどを行います。
したがって、SecurityProcessor (アクター) にメッセージを送信し、すべての先物が完了するのを待ちます。最後に、MergeHelper を使用して後処理を行います。SecurityProcessor はセキュリティを受け取り、いくつかの i/o と処理を行い、セキュリティに応答します
この設計は正しいですか? akka を使用してこの一般的な問題を実装するためのより良い/よりクールな方法はありますか?
nhibernate - LinqからNHibernate+変換+先物
.ToFuture <>()拡張メソッドを呼び出すことで、LinqtoNHibernateクエリをfutureとして実行できることを知っています。ただし、マップされたエンティティをロードするのではなく、データをDTOに直接ロードしています。したがって、次のようなものが得られます。
これは私が望むようには機能しません(私はあえて期待したと言います)。エラーが発生しました。The value "System.Object[]" is not of type "Entity" and cannot be used in this generic collection.
削除.ToFuture()
しても機能しますが、クエリはバッチ処理されません。
QueryOver APIを使用してこれを実行できることはわかっています。コードが非常にクリーンなため、LinqtoNHの方が好きです。
java - ExecutorService:Callableが実行されているかどうかを確認する方法は?
を使用してExecutorService
複数のスレッドからのタスク要求を処理し、Future
から返されたを使用しExecutorService#submit()
てタスクの進行状況を追跡しています。
しばらくしてからリクエストがまったく処理されていない場合は、リクエストを削除して、リクエスターにフィードバックを送りたいと思います。
そのため、タスクリクエストが現在処理されているかどうかを知りたいのですが、処理されている場合は、タスクリクエストが完了するのを待つか、それ以外の場合はキャンセルしてリクエスターにフィードバックします。
ヘルプやヒントをいただければ幸いです。ありがとう!