15

私の質問は、論理的な依存関係を持つタスクを管理し、同時に実行するためのフレームワークがJavaに存在するかどうかです。

私のタスクは次のとおりです。独立したタスクがたくさんあります(たとえば、A、B、C、D ...)。これらはコマンドとして実装されます(コマンドパターンのように)。これらすべてのタスクを受け入れて並行して実行する一種のエグゼキュータが欲しいです。タスクは、同期または非同期で相互に依存することができます(たとえば、Cを実行できない、Aを実行する前に)。

また、スケジューラの実行に影響を与えるカスタムヒューリスティックを組み込みたいと思います。たとえば、タスクAとBがCPUを集中的に使用し、Cのメモリ消費量が多い場合、AとCを並行して実行する方が理にかなっています。 AとBを実行しています。

自分でこのようなものを構築する前に(java.util.concurrent +アノテーションベースの制約/ルールについて考えています)、誰かが私のニーズに合うプロジェクトを教えてくれるかどうか疑問に思いました。よろしくお願いします

4

4 に答える 4

7

あなたの要件を満たすことができるタスクを管理するためのフレームワークがあるとは思いません。コマンドパターンを使用して正しい道を進んでいます。簡略化された同時実行モデルについては、 Akka フレームワークを参照してください。Akka は Actor モデルに基づいています。

アクター モデルは、もう 1 つの非常に単純な高レベルの同時実行モデルです。アクターは、一度に複数のメッセージに応答することはできず (メッセージはメールボックスのキューに入れられます)、変数を共有するのではなく、メッセージを送信することによってのみ通信できます。メッセージが不変のデータ構造である限り (これは Erlang では常に当てはまりますが、このプロパティを保証する手段を持たない言語では慣例でなければなりません)、すべてがスレッドセーフであり、他のメカニズムは必要ありません。これは、Web 開発 MVC フレームワークに見られる要求サイクルに非常に似ています。 http://metaphysicaldeveloper.wordpress.com/2010/12/16/high-level-concurrency-with-jruby-and-akka-actors/

Akka は Scala で書かれていますが、クリーンな Java API を公開しています。

于 2011-02-06T10:03:47.510 に答える
2

antこの目的のために使用する可能性を検討することをお勧めします。人気のビルド ツールとして知られていantますが、実際にはさまざまなタスクを実行する XML 制御エンジンです。そのフラグfork=trueはまさに必要なことをしていると思います:タスクを同時に実行します。Java アプリケーションantは他の Java アプリケーションから実行できるため、そのmainメソッドを呼び出すだけです。この場合、Ant API を使用してタスクをラップできます。つまり、Ant タスクとして実装できます。

私はこのアプローチを試したことはありませんが、うまくいくはずです。私は数年前にそれについて考え、あなたと同様の問題の可能な解決策として私の経営陣に提案しました.

于 2011-02-06T10:10:40.770 に答える
0

Eclipse のジョブ スケジューリング モジュールは、相互に依存するタスクを処理できます。http://www.eclipse.org/articles/Article-Concurrency/jobs-api.htmlをご覧ください。

于 2011-02-11T16:17:57.473 に答える