У меня есть существующая логика, которая выглядит следующим образом:
- Входные идентификаторы (минимум 1 значение, максимальное n значений могут быть введены вместе).
- Перебор этих идентификаторов с 1 по Nи извлекать данные, соответствующие им, и выполнять некоторые вычисления (метод извлечения данных и расчеты одинаковы и могут быть параметризованы для извлечения переданной переменной).
Как только эти значения получены для всех переданных идентификаторов, образуются массивыкак идентификатор 1: [значение a, значение b, значение c] идентификатор 2: [значение d, значение e, значение f] ... идентификатор 1: [значение x, значение y, значение z]
Как только мы получим все значения, определенные на шаге 3, создайте декартово произведение всех возможных комбинаций значений для идентификаторов 1,2, ... n и запустите логику сравнения, чтобы найти лучшее решение, которое может бытькак Идентификатор 1 - a, Идентификатор b, Идентификатор c.
Так как это последовательно, требуется время, и я надеялся сломать это сделатьwn следующим образом:
У меня есть существующая логика, которая выглядит следующим образом:
- Входные идентификаторы (минимум 1 значение, максимум n значений можно вводить вместе).
Вместо последовательной итерации идентификаторов, я мог бы сделать это параллельно.
Как только эти значения были получены для всех переданных идентификаторов, образуются массивы, такие как
- Идентификатор1: [Значение a, Значение b, Значение c]
- Идентификатор 2: [Значение d, Значение e, Значение f]
- ...
- Идентификатор 1: [Значение x, значение y, значение z]
После определения всех значений, определенных на шаге 3, выделите кандидатов для сравнения в несколько групп и запустите на них логику сравнения.параллельно скажем, я делю их на 3 группы с 3 идентификаторами.Пример:
Группа 1: Кандидат 1: Идентификатор 1 - Значение a, Идентификатор 2 - Значение d, Идентификатор n - Значение x.Кандидат 2: Идентификатор 1 - Значение a, Идентификатор 2 - Значение e, Идентификатор n - Значение y.Кандидат 3: Идентификатор 1 - Значение a, Идентификатор 2 - Значение e, Идентификатор n - Значение z.
Группа 2: Кандидат 1: Идентификатор 1 - Значение b, Идентификатор 2 - Значение d, Идентификатор n - Значение x.Кандидат 2: Идентификатор 1 - Значение b, Идентификатор 2 - Значение e, Идентификатор n - Значение y.Кандидат 3: Идентификатор 1 - Значение b, Идентификатор 2 - Значение e, Идентификатор n - Значение z.
и т. Д.
Я хочу запустить логику сравнения для этих групп параллельно и найти лучшее решение для каждой группы, а затем снова запустить логику сравнения для результатов первой итерации.
Идея состоит в том, чтобырадикально сократить время вычислений путем параллельного выполнения.
Один из вариантов, который я оценивал, - это использование Executor Framework из Java для параллельного выполнения этих задач.
Есть ли другие варианты, которые я могу рассмотреть.Существуют ли стандартные решения этой проблемы?