并行操作测试
来源:互联网 发布:西部世界什么意思 知乎 编辑:程序博客网 时间:2024/06/05 14:11
import org.junit.Test;import java.util.function.Consumer;import java.util.stream.LongStream;import java.util.stream.Stream;/** * Created by ibm on 2017/4/24. * 并行操作:选择适当的数据结构比优秀的算法与实现更加重要。 * 什么时候采用并行: * 1.在没有自动装箱拆箱的的操作情况下。 * 2.对结果没有顺序的要求下,元素的顺序操作在并行流的执行下,代价非常大。 * 3.对单个元素的操作消费较高的时候,如果单个操作成本很低,那么开启线程的操作话费是不值当的。 * 4.数据量大的情况,数据量小的话,并行并不是一个好方法。 * 5.数据源的类型为:arrayList,IntStream,HashSet,TreeSet时效率较好,LinkedList与Stream.iterate时效率低下。 */public class ParallelExercise { //比较顺序流,并行流,迭代的性能 @Test public void exercise(){ Integer num = 10000000; ParallelStream parallelStream = new ParallelStream(); System.out.println("sequentialSum = "); testPerformance((Integer parallelSum) -> parallelStream.sequentialSum(num),num); System.out.println("parallelSum = "); testPerformance((Integer parallelSum) -> parallelStream.parallelSum(num),num); System.out.println("iterativeSum = "); testPerformance((Integer parallelSum) -> parallelStream.iterativeSum(num),num); System.out.println("longStreamSequential = "); testPerformance((Integer parallelSum) -> parallelStream.longStreamSequential(num),num); System.out.println("longStreamParallel = "); testPerformance((Integer parallelSum) -> parallelStream.longStreamParallel(num),num); } private <T> void testPerformance(Consumer<T> parallelStream,T num){ long startTime = System.nanoTime(); parallelStream.accept(num); long endTime = System.nanoTime(); System.out.println((endTime - startTime)/1000000 + "ms"); } class ParallelStream{ //串行 public long sequentialSum(long n){ return Stream.iterate(1l,i -> i + 1).limit(n).reduce(0l,Long::sum); } //并行 public long parallelSum(long n){ return Stream.iterate(1l,i -> i + 1).limit(n).parallel().reduce(0l,Long::sum); } //迭代 public long iterativeSum(long n){ long result = 0l; for(long i = 0;i < n;i++){ result += i; } return result; } //longStream串行 public long longStreamSequential(long n){ return LongStream.rangeClosed(1,n).sum(); } //longStream并行 public long longStreamParallel(long n){ return LongStream.rangeClosed(1,n).parallel().sum(); } }}
0 0
- 并行操作测试
- matlab2016并行操作测试
- 卷积操作的GPU粗粒度并行实现及测试
- 测试树莓派是否支持OpenMP多核并行操作的代码
- 并行计算性能测试
- 测试并行程序
- 测试并行程序
- 测试并行程序
- SPLASH2并行测试程序
- C#并行计算测试
- GPDB 并行加载测试
- appium并行测试
- ORACLE并行操作
- ORACLE并行操作学习
- openmp嵌套并行操作
- oracle 并行操作
- Oracle 并行操作
- matlab中并行操作
- 转:程序员该如何定位?四个方向指引
- 使用nginx反向代理后如何在后台web应用中获取用户ip
- opencv3学习笔记(二)图像的截图,旋转与大小的变化
- java中讲讲ObjectOutputStream的用法,举例?
- 切蛋糕问题
- 并行操作测试
- 源码阅读--Retrofit
- Ajax 学习笔记
- Ebc编码与asc编码转换
- Android数据存储和访问-商品展示
- 初识Java-IO流
- 偏微分方程数值解主要步骤
- 根据二叉树的前序中序遍历序列重建二叉树
- 相对论核心原理