并行流parallelStream
来源:互联网 发布:拉伸片的编程 编辑:程序博客网 时间:2024/06/07 03:03
1.并发与并行的区别:
并发: 一个时间段内有几个程序都处于已启动到运行完毕之间,且这几个程序都是在同一个处理机上运行。但在任一个时刻点只有一个程序在处理机上运行
并行: 在同一个时刻,多核处理多个任务。把工作拆分,同时在多核CPU上执行
2.例子:
import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; import org.junit.Test; /** Parallel Streams , 并行流提高性能 流可以是顺序的也可以是并行的。顺序流的操作是在单线程上执行的,而并行流的操作是在多线程上并发执行的。 */ public class ParallelStreams { int max = 1000_000; List<String> values; public ParallelStreams(){ //创建一个包含唯一元素的大容器: values = new ArrayList<String>(); for(int i=max; i>0; i--){ UUID uuid = UUID.randomUUID(); values.add(uuid.toString()); } } //测试排序这些元素需要多长时间。 //Sequential Sort, 采用顺序流进行排序 @Test public void sequentialSort(){ long t0 = System.nanoTime(); long count = values.stream().sorted().count(); System.err.println("count = " + count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("sequential sort took: %d ms", millis)); //sequential sort took: 1932 ms } //parallel Sort, 采用并行流进行排序 @Test public void parallelSort(){ long t0 = System.nanoTime(); long count = values.parallelStream().sorted().count(); System.err.println("count = " + count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("parallel sort took: %d ms", millis)); //parallel sort took: 1373 ms 并行排序所花费的时间大约是顺序排序的一半。 } }
public static void main(String[] args) { List<Integer> array = new ArrayList<Integer>() {{ add(1); add(2); add(3); add(4); add(5); }}; array.stream().forEach(u -> System.out.print(u + ","));//按照正常顺序输出 1,2,3,4,5, System.out.println("----------parallel执行分割线------------"); array.parallelStream().forEach(u -> System.out.print(u + ","));//随机输出 3,5,4,1,2,
3.影响并行流的主要五个因素
3.1数据大小
输入数据的大小会影响并行化处理,当只有足够大、每个数据处理管道花费的时间足够多时,并行化才有意义
3.2源数据结构
一般都是基于集合进行并行化
3.3装箱
处理基本类型比处理装箱类型要快
3.4核的数量
只有在多核的机器上使用才有意义,并且是运行时能够使用的多少核
3.5单元处理开销
原先处理耗时较长,使用并行化才有意义
阅读全文
0 0
- 并行流parallelStream
- Java8新特性——并行流parallelStream
- 【Java没基础】Java 8 并行流 ParallelStream
- JAVA使用并行流(ParallelStream)时要注意的一些问题
- 深入浅出parallelStream
- 深入浅出parallelStream
- 学会使用java8的parallelStream
- JDK8的ParallelStream遍历无序的问题
- java8并行流操作
- Java8---并行流
- stream之并行流
- jdk8并行流
- java8 并行流使用
- Java8--并行流
- 并行流计算
- 并行
- 并行
- Java8系列--并行流与并行流的性能测试
- Android之Activity状态的保存和恢复
- zigbee link status
- Android Parcelable
- 1013. Battle Over Cities (25)
- Android 自定义View
- 并行流parallelStream
- 数安时代(GDCA)与深信服携手合作,签订战略合作协议
- DashPathEffect
- 有关Fragment的知识点
- 数据库系统——学习资料(更新.........)
- python 2.7 类中使用多进程(multiprocessing)执行类函数时的问题
- Unity日记---Transform与mTransform耗时对比
- .Netcore之日志组件Log4net、Nlog性能比较
- Git理解