Java如何优化并行数据处理及性能评估?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4679个文字,预计阅读时间需要19分钟。
并行流+并行流是一个将元素分成多个块,每个块由不同的线程处理的流。这样可以自动分区,使所有处理器都能忙碌起来。例如,要编写一个方法,接受一个整数n,计算1-n的和。可以这样实现:
并行流
并行流是一个把元素分成多个块的流,每个块用不同的线程处理。可以自动分区,让所有的处理器都忙起来。
假设要写一个方法,接受一个数量n做参数,计算1-n的和。可以这样实现:
public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); }
也许可以使用parallel方法,简单地使用并行计算,提高程序性能:
public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); }
这样,流可能在内部被分成多个块,导致reduction操作可以在不同的块上互不依赖地并行地各自工作。最后,reduction操作组合每个子流的并行reductions的返回值,返回的结果就是整个流的结果。见下面的示意图
实际上,调用parallel方法,流自身不会有任何变化。在内部,设置一个布尔类型的标记,标明你想在并行模式执行操作,接下来的操作都是并行的。
本文共计4679个文字,预计阅读时间需要19分钟。
并行流+并行流是一个将元素分成多个块,每个块由不同的线程处理的流。这样可以自动分区,使所有处理器都能忙碌起来。例如,要编写一个方法,接受一个整数n,计算1-n的和。可以这样实现:
并行流
并行流是一个把元素分成多个块的流,每个块用不同的线程处理。可以自动分区,让所有的处理器都忙起来。
假设要写一个方法,接受一个数量n做参数,计算1-n的和。可以这样实现:
public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); }
也许可以使用parallel方法,简单地使用并行计算,提高程序性能:
public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); }
这样,流可能在内部被分成多个块,导致reduction操作可以在不同的块上互不依赖地并行地各自工作。最后,reduction操作组合每个子流的并行reductions的返回值,返回的结果就是整个流的结果。见下面的示意图
实际上,调用parallel方法,流自身不会有任何变化。在内部,设置一个布尔类型的标记,标明你想在并行模式执行操作,接下来的操作都是并行的。

