博客园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)
阅读排行榜
- JDK8新特性详解(一)(245)
- JDK8新特性详解-Stream流常用方法(二)(176)
- Stream并行流详解(141)
- 面试级解析HashMap(21)
Copyright © 2020 我是七月呀
Powered by .NET 5.0.1-servicing.20575.16 on Kubernetes