В настоящее время я оцениваю различные решения параллелизма для решения бизнес-проблемы. Вариант использования сродни алгоритму «смущающе-параллельного».
По сути, для одного запроса пользователя нам нужно получить данные из нескольких разных источников данных, прежде чем вычислять ответ. В настоящее время все 3 вызова DAO выполняются последовательно, но не имеют взаимозависимостей, поэтому их можно выполнять параллельно.
Решения, реализованные на данный момент:
- java.util.concurrent.ExecutorService с использованием Callables и Futures
- org.springframework.scheduling.annotation.Async, чтобы позволить Spring управлять пулом потоков, но по-прежнему позволяет мне делать асинхронные вызовы
- Akka (считается излишним) для нашего относительно простого варианта использования
Последним фреймворком, который я хотел оценить, был фреймворк Java ForkJoin, я вижу несколько примеров использования RecursiveTasks, но мой вариант использования не является рекурсивным по своей природе, поэтому не соответствует модели: если задача достаточно мала, сделайте это, иначе разделите ее и рекурсивно вызовите то же самое. метод (т.е. разделяй и властвуй)
Мой вариант использования: разделить задачу на 3 задачи. разветвите все 3 и снова присоединитесь. Является ли это допустимым вариантом использования для реализации ForkJoin? Или я должен придерживаться общей реализации ExecutorService.
ExecutorCompletionService
а>? Вы можете запускать 3 вызова параллельно и получать результаты по мере их появления. - person assylias   schedule 04.07.2012