Сейчас я работаю над системой.Это сложная система, но она сводится к классу Solver
с помощью метода, подобного следующему:
public int solve(int problem); // returns the solution, or 0 if no solution found
Теперь, когда система запущена и работает, время выполнения этого метода составляет около 5 секунд.ожидается и достаточно быстро.Тем не менее, я планирую запустить несколько тестов, которые выглядят примерно так:
List<Integer> problems = getProblems();
List<Integer> solutions = new ArrayList<Integer>(problems.size);
Solver solver = getSolver();
for (int problem: problems) {
solutions.add(solver.solve(problem));
}
// see what percentage of solutions are zero
// get arithmetic mean of non-zero solutions
// etc etc
Проблема в том, что я хочу выполнить это при большом количестве проблем и не хочу ждать результатов вечно,Скажем, у меня миллион проблем с тестами, и я хочу, чтобы тесты были выполнены за то время, которое у меня ушло на приготовление чашки чая. У меня два вопроса:
Скажем, у меня миллионпроцессор ядра и что экземпляры Solver
являются поточно-ориентированными, но без блокировки (они неизменяемы или что-то в этом роде), и что все вычисления, которые они выполняют, находятся в памяти (т. е. не происходит никакого диска, сети или других операций).Могу ли я просто заменить список решений на список безопасных потоков и запустить потоки, чтобы решить каждую проблему и ожидать, что она будет быстрее?Насколько быстрее?Может ли он работать за 5 секунд?
Существует ли приличный сервис облачных вычислений для Java, где я могу купить 5 миллионов секунд времени и запустить этот код за пять секунд?Что мне нужно сделать, чтобы подготовить мой код для работы в таком облаке?Сколько стоит 5 миллионов секунд?
Спасибо.