`

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并行计算与优化主要关注的是如何在这款多核多线程处理器上提升内存性能基准程序STREAM的执行效率。STREAM是一个常用的微处理器内存性能测试工具,它通过四个基本的内存操作(Copy、Scale...

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

    并行流Parallel Stream我们先以一个简单的例子来开始-在任一个Collection类型上调用parallelStream方法-它将返回一个可能的并行流。这种流的默认处理流程是使用ForkJoinPool.commonPool(),这是一个被整个应用程序所...

    deepstream-test1-app_rtsp-master基于Deepstream实现RTSP视频流的读取

    【标题】"deepstream-test1-app_rtsp-master"是一个项目,专注于使用Deepstream库来处理RTSP(Real-Time Streaming Protocol)视频流。这个项目的核心是用C++编程语言编写的源代码,它允许用户从RTSP服务器接收视频...

    java8-Stream性能差?不要人云亦云.pdf

    Stream 并行流计算是普通 for 循环执行效率的 4-5 倍。 第二个测试用例是,使用长度为 10 的 1000000 随机字符串,求最小值。测试结果显示,普通 for 循环执行效率与 Stream 串行流不相上下。Stream 并行流的执行...

    Lambda表达式的相关用法

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

    java异常处理机制

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

    从旧金山到上海, HTTP-3 非常快!.doc

    HTTP/3 的主要特点是多路复用,引入了二进制帧和流机制,允许使用单个 TCP 连接,通过 Stream 并行下载资源,提高了传输效率。此外,HTTP/3 还带来了新的头部压缩算法 QPACK。 HTTP/3 的性能测试结果显示,HTTP/3 ...

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

    在本文中,我们将深入探讨 Stream 的状态以及并行操作。 首先,让我们回顾一下 Stream 的基本操作。Stream 可以通过源操作(如从集合或数组创建)生成,接着通过一系列中间操作(如过滤、映射等)进行数据处理,...

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

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

    高级篇.pdf

    Stream并行流利用多核CPU提升计算性能,而GC调优和JVM内存分配调优是解决性能问题的关键。通过分析和理解各种类型的OutOfMemoryError和StackOverflowError,我们可以更好地预防和处理这些异常。 Spring 5和Spring ...

    deepstream sdk 2.0

    DeepStream SDK 2.0是NVIDIA推出的一款专门用于智能视频分析的软件开发工具包,它基于开放源码的GStreamer框架构建而成,结合了GPU和CPU的异构并行处理能力,以及对并行化和同步的隐藏处理,天然支持多线程操作。...

    Linux内存性能测试工具stream

    为了获得更全面的性能评估,你可能需要多次运行STREAM,调整不同的测试参数,如数组大小或并行度。同时,对比不同硬件配置下的结果,可以帮助分析哪些硬件升级能够显著提升内存性能。 总之,STREAM作为一个强大的...

    parallel-stream-fork-join-pool

    并行流执行 所有并行流执行都使用相同的(单例)线程池:ForkJoinPool.commonPool()。 这就是为什么在并行流中执行 IO(更常见的是阻塞调用)非常糟糕的原因:被阻塞的线程无法被 JVM 中的所有并行流使用。 为此,您...

    金九银十Java综合面试总结.pdf

    16. **JDK1.8 Stream并行**:Stream的并行操作是通过Fork/Join框架实现的,使用内置的ForkJoinPool进行任务分解和合并。 17. **CompletableFuture**:CompletableFuture是异步编程工具,支持链式调用,方便构建复杂...

    JAVA并行计算的一些资料 论文

    5. **并行流(Parallel Stream)**:Java 8引入了并行流,允许开发者利用硬件并行性对数据进行并行操作。Stream API的parallel()方法可以将顺序流转换为并行流,从而在处理大量数据时提高性能。 6. **Fork/Join框架**...

    java8并行计算示例

    本示例通过利用Java 8的并行流(Parallel Stream)特性,显著提升了计算效率,具体体现在对1到400亿数列求和的问题上。传统顺序计算方法耗时约13秒,而采用并行计算则将时间缩短至3秒左右,效率提升近4倍。 并行...

    并行操作技术介绍

    在Java中,并行流的操作主要依赖于Stream API。下面详细介绍如何使用这些API来进行并行操作: 1. **并行流获取**: - 默认情况下,通过`stream()`方法获取的流为串行流。 - 使用`parallelStream()`方法可以直接...

    Java-Stream流详解.pptx.pptx

    - **并行Stream简介**:并行Stream通过将数据分块并使用多线程进行并行处理,加速数据处理过程。 - **工作原理**:数据被分割成多个部分,每个部分在独立的线程中并行处理,然后将结果合并。 - **使用场景**:适合大...

    Java8 Stream学习

    4. **并行处理**:Stream支持并行处理,可以利用多核处理器提高处理效率。 5. **可组合性**:Stream操作可以方便地与其他操作组合使用,提高代码的灵活性。 综上所述,Java8的Stream API为处理集合数据提供了一种...

    Java Stream 使用详解

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

Global site tag (gtag.js) - Google Analytics