Java8并行流---并行数据处理与性能

news2024/9/30 5:32:31

Java8并行流---并行数据处理与性能

  • 0.主要内容
  • 1.并行流
    • 1.1将顺序流转换为并行流
  • 附录
    • 附录.1

0.主要内容

主要内容
用并行流并行处理数据
并行流的性能分析
分支/合并框架
使用Spliterator分割流

1.并行流

调用parallelStream方法来把集合转换为并行流。并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样一来,你就可以自动把给定操作的工作负荷分配给多核处理器的所有内核,让它们都忙起来。让我们用一个简单的例子来试验一下这个思想。
假设你需要写一个方法,接受数字n作为参数,并返回从1到给定参数的所有数字的和。一个直接(也许有点土)的方法是生成一个无穷大的数字流,把它限制到给定的数目,然后用对两个数字求和的BinaryOperator来归约这个流,如下所示:
在这里插入图片描述
这似乎是利用并行处理的好机会,特别是n很大的时候。那怎么入手呢?你要对结果变量进
行同步吗?用多少个线程呢?谁负责生成数呢?谁来做加法呢?
根本用不着担心啦。用并行流的话,这问题就简单多了!

1.1将顺序流转换为并行流

你可以把流转换成并行流,从而让前面的函数归约过程(也就是求和)并行运行——对顺序
流调用parallel方法:

Stream.iterate(1L, i -> i + 1)
	  .limit(n)
	  .parallel()
	  .reduce(0L, Long::sum);

请注意,在现实中,对顺序流调用parallel方法并不意味着流本身有任何实际的变化。它在内部实际上就是设了一个boolean标志,表示你想让调用parallel之后进行的所有操作都并行执行。类似地,你只需要对并行流调用sequential方法就可以把它变成顺序流。请注意,你可能以为把这两个方法结合起来,就可以更细化地控制在遍历流时哪些操作要并行执行,哪些要顺序执行。例如,你可以这样做:

stream.parallel()
	  .filter(...)
      .sequential() 
      .map(...)
      .parallel()
      .reduce();

但最后一次parallel或sequential调用会影响整个流水线。在本例中,流水线会并行执行,因为最后调用的是它。

配置并行流使用的线程池
看看流的parallel方法,你可能会想,并行流用的线程是从哪儿来的?有多少个?怎么自定义这个过程呢?
并行流内部使用了默认的ForkJoinPool,它默认的线程数量就是你的处理器数量,这个值是由Runtime.getRuntime().availableProcessors()得到的。
但是你可以通过系统属性java.util.concurrent.ForkJoinPool.common.parallelism来改变线程池大小,如下所示:
System.setProperty(“java.util.concurrent.ForkJoinPool.common.parallelism”,“12”);
这是一个全局设置,因此它将影响代码中所有的并行流。反过来说,目前还无法专为某个并行流指定这个值。一般而言,让ForkJoinPool的大小等于处理器数量是个不错的默认值,除非你有很好的理由,否则我们强烈建议你不要修改它。

但是使用并行流并不是会绝对的比循序流快,必须要使用更有针对性的方法

在这里插入图片描述
在这里插入图片描述

附录

附录.1

参考书籍《Java8实战》 百度网盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch应用(入门2) 一维线性回归

目录nn.Module(模组)torch.optim (优化)模型的保存和加载一维线性回归代码如下:均方差损失函数nn.MSELoss()model.parameters()的理解与使用torch.autograd.Variableoptimizer.zero_grad()model.eval的作用深度学习方法——pytorch下GPU与CPU…

如何设计一个好的工业产品?

许多人不知道工业设计的本质是什么?与工业设计相比,其本质是解决消费群体的相关问题,实现消费者的需求,使客户更容易选择。但是如何设计一个好的工业产品呢? 1.更加科学合理地摆脱困境 产品设计必须开拓进取。它应该能够引领时代潮流&#…

基础数学复习(2)——插值

文章目录插值和拟合的区别(了解)拉格朗日插值(必考)插值余项说不定会考的证明题拉格朗日插值缺点和适用范围(了解)牛顿插值(必考)推导差商的性质(会考)——通…

Java语法五:锁策略以及CAS

目录 1.常见的锁策略 2:Synchronized原理 2.1:加锁工作工程 2.2:其他的优化操作 2.2.1:锁消除 2.2.2:锁粗化 3.CAS 3.1:实现原子类 3.2:CAS中的ABA问题 3.2.1:什么是ABA问题 3.2.2&am…

【JavaScript】俄罗斯方块简单网页版

文章目录js制作简单网页版俄罗斯方块效果演示设计思路一、HTML网页结构代码二、CSS代码三、JS代码四、代码资源分享js制作简单网页版俄罗斯方块 程序虽然很难写,却很美妙。要想把程序写好,需要写好一定的基础知识,包括编程语言、数据结构与算…

在mac上搭建php的SNMP开发环境

前言 最近需要开发AC的snmp协议,需要开启php的snmp扩展,网上能搜索到的主要还是windows和centos下面的几篇资料。这里主要介绍下mac系统下如何搭建php的snmp开发环境。 第一步,安装php: 首先需要在mac上面安装PHP,这…

重点物联网漏洞利用情况

重点物联网 漏洞利用情况本节我们选取了两个漏洞进行分析。UPnP 相关的漏洞我们将在 4.4.3 进行分析,除去 UPnP 相关漏 洞外,被利用最多的是 Eir D1000 路由器的一个漏洞 [44](CVE-2016-10372),我们将对其进行分析。 …

第006课 - 使用vagrant快速创建linux虚拟机

使用vagrant快速创建linux虚拟机 项目中使用的环境,都是装在linux当中的,我们可以使用linux虚拟机。 https://www.virtualbox.org/ 直接双击进行安装运行。 CPU开启虚拟化 virtualbox安装需要我们的cpu开启虚拟化。 这个需要设置主板。 在开机启动的时候,找到cpu配置:…

什么是金手指,金手指的设计要求有哪些?

金手指(connecting finger)是电脑硬件如:(内存条上与内存插槽之间、显卡与显卡插槽等),所有的信号都是通过金手指进行传送的。金手指由众多金黄色的导电触片组成,因其表面镀金而且导电触片排列如…

阿里云主要产品架构介绍

文章目录前言主要产品云产品访问拓扑ECS架构RDS架构OCS架构SLB架构OSS架构OTS架构ODPS架构SLSSLS的产品视角SLS运维视角OAS结语前言 阿里云产品众多,基本涵盖了从存储到计算到网络的方方面面,当然还包括大数据和人工智能。这些产品,共同组成…

响应式原理 之 vue2 vue3

目录 一、响应式概念 二、响应式函数的实现 watchFn 三、响应式依赖的收集 四、监听对象的变化 1. vue2 2. vue3 五、对象的依赖管理 1. 图解 2. 代码 六、响应式完整代码 一、响应式概念 m有一个初始化的值,有一段代码使用了这个值那么在m有一个新的值时…

热门探讨丨SaaS软件是否正在“毁掉”数字化转型企业?

——当它浮出水面,才能看到水下的错落。 截至2021年末,我国企业的数量达到4842万户,增长1.7倍,其中99%以上都是中小企业。 根据调查,在数字化转型浪潮中,我国有超过70%的企业对数字化转型处于积极态度&am…

网络部署运维实验(pat 端口映射含命令)

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,…

Vue JSX 上手指南

JSX 简介 JSX Javascript XML。在 Javascript 里写 XML,同时拥有 Javascript 的灵活性和 HTML 的语义化。 Template vs JSX template 是 Vue 的默认写法,也更推荐。因为 template 语法是固定的,Vue 在编译层面为它做了很多静态标记的优化…

MySQL简介及常用引擎介绍

MySQL 由 My 和 SQL 组成,其中的 SQL 部分即为:Structured Query Language,意为结构化查询语⾔,是访问数据库的最常⻅的标准化语⾔。 MySQL 是一款优秀的、开源的数据库管理系统,同时 MySQL 也是一款可移植的数据库&a…

【WSL】[02] windows subsytem linux 配置和使用

第【2】章前言: 上一篇我们已经安装好了ubuntu在WSL下的GUI的桌面:我们现在继续进一步进行配置工作。同时也把,运用WSL的流程摸一把,以备后用。 1 在windows的PowerShell终端进行配置和查询: 1.1 查询所有支持的可以…

极小尺寸,超低功耗,高度集成,天翼物联NB-IoT云芯模组

数字经济时代,物联网已融入我们的日常生活。比如,智能抄表代替人工上门抄表,运动手环实时传输心率情况,烟感报警器远程告警……这些高科技背后都有一颗小而强大的芯片在支撑。 天翼物联云芯模组依托天翼物联网平台(AIo…

制造业项目管理软件如何帮助企业做好项目管理?

项目产品、采购、销售、BOM变更管理不全面; 项目进度追踪管理难; 项目进度款管不清、项目尾款管不到; … … 而以上仅仅是生产制造企业所面临的项目管理问题的“冰山一角”。 采用“项目制”生产模式的制造企业,需要做到项目…

理解XaaS(SaaS、Baas、Paas、Iaas)

XaaS : XX as a Service 参考原文 以电商来举例 一套电商系统需要的开发资料 产品经理:设计电商系统 前端工程师:开发页面 后端工程收:开发后端 运维工程师:搭建环境,部署到服务器,负责后期维护等 服务器…

指南解读:急性心力衰竭中国急诊管理指南(2022)

心力衰竭(heart failure,HF 简称心衰)是由于心脏结构和 / 或功能异常导致心室充盈和/或射血能力受损的一组临床综合征,其病理生理学特征为肺淤血和/或体循环淤血、伴或不伴有组织器官低灌注,主要临床表现为呼吸困难、乏…