Каковы альтернативы Java Executor для преобразования последовательной программы в программу, использующую параллельное выполнение? - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть существующая логика, которая выглядит следующим образом:

  1. Входные идентификаторы (минимум 1 значение, максимальное n значений могут быть введены вместе).
  2. Перебор этих идентификаторов с 1 по Nи извлекать данные, соответствующие им, и выполнять некоторые вычисления (метод извлечения данных и расчеты одинаковы и могут быть параметризованы для извлечения переданной переменной).
  3. Как только эти значения получены для всех переданных идентификаторов, образуются массивыкак идентификатор 1: [значение a, значение b, значение c] идентификатор 2: [значение d, значение e, значение f] ... идентификатор 1: [значение x, значение y, значение z]

  4. Как только мы получим все значения, определенные на шаге 3, создайте декартово произведение всех возможных комбинаций значений для идентификаторов 1,2, ... n и запустите логику сравнения, чтобы найти лучшее решение, которое может бытькак Идентификатор 1 - a, Идентификатор b, Идентификатор c.

Так как это последовательно, требуется время, и я надеялся сломать это сделатьwn следующим образом:

У меня есть существующая логика, которая выглядит следующим образом:

  1. Входные идентификаторы (минимум 1 значение, максимум n значений можно вводить вместе).
  2. Вместо последовательной итерации идентификаторов, я мог бы сделать это параллельно.

  3. Как только эти значения были получены для всех переданных идентификаторов, образуются массивы, такие как

    • Идентификатор1: [Значение a, Значение b, Значение c]
    • Идентификатор 2: [Значение d, Значение e, Значение f]
    • ...
    • Идентификатор 1: [Значение x, значение y, значение z]
  4. После определения всех значений, определенных на шаге 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 для параллельного выполнения этих задач.

Есть ли другие варианты, которые я могу рассмотреть.Существуют ли стандартные решения этой проблемы?

...