我正在制作一个系统。这是一个复杂的系统,但它归结为一个Solver
类这样的方法:该方法有望如何让此Java代码可并行化?我如何使它变得易变
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,我可以购买500万秒的时间,让这个代码运行在五秒钟?我需要做什么来准备我的代码以在这样的云上运行?无论如何,500万秒的成本是多少?
谢谢。
我发现我对这个评论有点晚了,但我认为它可能仍然相关;你如何评价一个`CachedThreadPool`到一个`FixedThreadPool`,其中poolize被设置为可用内核的数量? – posdef 2012-02-14 16:47:15