現在、ビジネス上の問題を解決するために、さまざまな同時実行ソリューションを評価しています。ユースケースは、「恥ずかしい並列」アルゴリズムに似ています。
基本的に、1 つのユーザー リクエストに対して、レスポンスを計算する前に、複数の異なるデータ ソースからデータを取得する必要があります。現在、3 つの DAO 呼び出しはすべてシリアルに行われますが、相互依存関係がないため、並行して行うことができます。
これまでに実装されたソリューション:
- Callable と Future を使用した java.util.concurrent.ExecutorService
- org.springframework.scheduling.annotation.Async を使用して、Spring がスレッド プールを管理できるようにしますが、aysnchronous 呼び出しを行うこともできます。
- 比較的単純なユースケースの Akka (オーバーキルと見なされる)
私が評価したかった最後のフレームワークは Java ForkJoin フレームワークでした。RecursiveTasks の使用例を複数見ることができますが、私のユース ケースは本質的に再帰的ではないため、モデルに適合しません。タスクが十分に小さい場合は、タスクを分割して同じものを再帰的に呼び出します。メソッド (つまり、分割統治)
私のユースケースは、タスクを 3 つのタスクに分割することです。3 つすべてをフォークして、再度参加します。これは ForkJoin 実装の有効な使用例ですか? または、一般的な ExecutorService 実装に固執する必要があります。