`

Stream的并行

    博客分类:
  • jdk8
阅读更多

先举个例子说明一下并行和并发:

假设:有8辆车(8核处理器)、8堆货物(8个应用)
并行:用8辆车在同一时刻上开始去拉这8堆货物,相当于每车拉一堆。
并发:用1辆车在某个时间段去拉这8堆货物,轮流着拉,先拉一段货物A、再拉一段货物B、再拉货物A、再
     拉货物B,依次循环

 

sequential():可将并行流修改为顺序流。

parallel():将顺序流修改为并行流。 

 

在java8中,stream并行流就是一个把内容分割成多个数据块,再用不同的线程去分别处理每个数据块的处理方式。在并行流内部使用的是ForkJoinPool(分支/合并框架),其中默认的线程数量就是你当前机器的处理器数量。

 

虽然stream具有并行的功能,但也并不是每次都使用并行执行效率会更高,对于流的并行化执行也是需要消耗资源的。对于并行化来说,其执行时本身就需要对流做递归划分,把每个子流的规约操作分配到不同线程上,然后把这些操作的结果再合并成一个值,就这需要数据在多个内核之间移动,所以当数据量很小时并行处理所带来的好处还比不上并行化所造成的额外开销大,也就是说并行流并不总是比顺序流快,是需要前提条件的。

在处理装箱和拆箱操作时,也尽量使用原始类型的流(IntStream/LongStream等)来减少资源的利用。

 

jdk7中的分支合并框架

fork/join的运行方式:
if(任务足够小或不可再分割){
      直接顺序计算该任务
} else {
      1、将任务分割成两个子任务
      2、递归调用该方法拆分每个子任务,直至所有的子任务不可再分
      3、合并每个子任务的结果
}

 其中,还涉及到“工作窃取”算法,具体可参考:http://www.infoq.com/cn/articles/fork-join-introduction/

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    面向FT1000微处理器的STREAM并行计算与优化.pdf

    面向FT1000微处理器的STREAM并行计算与优化.pdf

    Java8并行流中自定义线程池操作示例

    主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下

    Lambda表达式的相关用法

    Lambda and Anonymous Classes(I),展示如何使用Lambda表达式替代匿名内部类,说明Lambda表达式和函数接口的关系。...ParallelStream,Stream并行实现原理。 Stream Performance,Stream API性能评测。

    java异常处理机制

    java异常处理机制,异常的概念,发生的原因,throwable,捕获异常的简单思维导图

    API搜索引擎(简单易上手适用于各种课程设计,附带几个测试用例) 展示:http://43.143.77.107:8090

    4、 利用 Parallel Stream 并行执行,提高构建速度;5、利用线程池进行多线程处理提高索引保存速度 6、利用 AOP 切面计算索引保存时间 7、搜索模块利用 HTML+CSS+JS 实现前端搜索功能 8、为索引构建 搜索树 操作方法...

    并行计算体系结构课件

    多指令流多数据流:多指令流多数据流的英文是"Multiple Instruction Stream Multiple Data Stream",它使用多个控制器来异步地控制多个处理器,从而实现空间上的并行性。 并行处理机pvp: 并行向量处理机最大的特点...

    java8-Stream的状态与并行操作.pdf

    java8-Stream的状态与并行操作.pdf

    Java Stream 使用详解

    Stream是 Java 8新增加的类,用来补充集合类。  Stream代表数据流,流中的数据元素的数量...  Java Stream提供了提供了串行和并行两种类型的流,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和终执

    07.第七节-使用stream的Max查找最大值.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    Stream和Lambda表达式最佳实践

    Stream和Lambda表达式是Java 8引入的两个重要特性,它们极大地简化了集合处理和函数式编程的复杂性。以下是关于Stream和Lambda表达式的最佳实践介绍: Lambda表达式 Lambda表达式允许我们以简洁的方式表示匿名函数...

    parallel_stream:Elixir的并行流实现

    parallel_stream:Elixir的并行流实现

    06.第六节-使用stream的Reduce求和.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    11.第十一节-使用stream的Limit和skin分页.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    02.第二节-stream基本概念.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    03.第三节-stream流的写法基本演示.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    04.第四节-串行流与并行流实现的区别.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    java8新特性Lambda与stream视频教程-文档和代码.rar

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    io-recurse-tests:创建一些基准测试,以递归方式列出所有IO文件

    Java 8 Stream并行 蔚来 28.425秒 是的 是的 步行文件树 蔚来 28.4718S 是的 是的 Java 8流顺序 蔚来 29.62秒 是的 是的 文件行者 输入/输出 32.5256秒 是的 不 listFiles-递归 输入/输出 32.5864S 是的 不 ...

    05.第五节-使用stream将list转Map集合.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    10.第十节-使用stream流sorted实现排序.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

Global site tag (gtag.js) - Google Analytics