2020-12-25

博客园Logo
首页
新闻
博问
专区
闪存
班级

代码改变世界
搜索
注册
登录
返回主页
我是七月呀
博客园
首页
新随笔
联系
订阅
管理
Stream并行流详解

1、并行与并发的区别

在说到并行的时候,相信很多人都会想到并发的概念。那么并行和并发两者一字之差,有什么区别呢?

并行:多个任务在同一时间点发生,并由不同的cpu进行处理,不互相抢占资源

并行:

并发:多个任务在同一时间点内同时发生了,但由同一个cpu进行处理,互相抢占资源

并发:

当在大量数据处理上,数据并行化可以大量缩短任务的执行时间,将一个数据分解成多个部分,然后并行处理,最 后将多个结果汇总,得到最终结果。

2、并行流原理介绍

对于并行流,其在底层实现中,是沿用了Java7提供的fork/join分解合并框架进行实现。fork根据cpu核数进行数 据分块,join对各个fork进行合并。实现过程如下所示:

3、影响并行流性能主要存在5个因素

对于并行流,一定不要陷入一个误区:并行一定比串行快。并行在不同的情况下它不一定是比串行快的。影响并行 流性能主要存在5个因素:

1)数据大小:输入数据的大小,直接影响了并行处理的性能。因为在并行内部实现中涉及到了fork/join操作,它 本身就存在性能上的开销。因此只有当数据量很大,使用并行处理才有意义。

2)源数据结构:fork时会对源数据进行分割,数据源的特性直接影响了fork的性能。 ArrayList、数组或IntStream.range,可分解性最佳,因为他们都支持随机读取,因此可以被任意分割。 HashSet、TreeSet,可分解性一般,其虽然可被分解,但因为其内部数据结构,很难被平均分解。 LinkedList、Streams.iterate、BufferedReader.lines,可分解性极差,因为他们长度未知,无法确定在哪里进行 分割。

3)装箱拆箱 尽量使用基本数据类型,避免装箱拆箱。

4)CPU核数 fork的产生数量是与可用CPU核数相关,可用的核数越多,获取的性能提升就会越大。

5)单元处理开销 花在流中每个元素的时间越长,并行操作带来的性能提升就会越明显。

4、测试总结

1)基本类型

性能消耗: Stream串行>for循环>Stream并行

2)对象

性能消耗:Stream串行>for循环>Stream并行

3)复杂对象

性能消耗:for循环>Stream串行>Stream并行

结论:对于简单操作,如果环境机是多核的话,建议使用Stream并行,同时在不考虑核数的情况 下,普通for循环性能要明显高于Stream串行,相差两倍左右。 对于复杂操作,推荐使用Stream API操作。

好文要顶 关注我 收藏该文
我是七月呀
关注 - 0
粉丝 - 0
+加关注
0 0
« 上一篇: JDK8新特性详解-Stream流常用方法(二)
posted @ 2020-12-24 16:27 我是七月呀 阅读(142) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】博客园x丝芙兰-圣诞特别活动:圣诞选礼,美力送递
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【福利】AWS携手博客园为开发者送免费套餐+50元京东E卡
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· nodejs-Stream(流)
· java8-Stream流API
· Stream流案例
· JDK8新特性—stream流
· Java8新特性-Stream流
» 更多推荐…

最新 IT 新闻:
· 游族CEO林奇被搭档投毒,三体宇宙会崩塌吗?
· 被在线教育公司盯上的“SA圈”:陪你学习,还是卖货给你?
· 出货量破亿!联发科第一次登顶智能手机SoC
· AirPods Max音质有短板!这是硬伤
· Office Word又添新功能“微软编辑器”:检查并修正语法错误
» 更多新闻…
公告
昵称: 我是七月呀
园龄: 1年8个月
粉丝: 0
关注: 0
+加关注
< 2020年12月 >
日 一 二 三 四 五 六
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
搜索

找找看

谷歌搜索
随笔档案
2020年12月(4)
阅读排行榜

  1. JDK8新特性详解(一)(245)
  2. JDK8新特性详解-Stream流常用方法(二)(176)
  3. Stream并行流详解(141)
  4. 面试级解析HashMap(21)
    Copyright © 2020 我是七月呀
    Powered by .NET 5.0.1-servicing.20575.16 on Kubernetes
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值