Effective Java - 谨慎使用Stream并行
作者:
DZQANN | 来源:发表于
2022-07-21 22:40 被阅读0次
第48条 谨慎使用Stream并行
- 如果
Stream
是通过Iterator
创建的,或者使用了中间操作的limit
,那么并行pipeline
也不能提高性能
- 如果想要在
Stream
上通过并行提高性能,最好是通过ArrayList
、HashMap
、HashSet
、ConcurrentHashMap
、等,他们的特点是可以方便精切的被切分成任意大小的子范围
-
Stream
的终止操作也会影响执行效率。应该尽量将工作放到pipeline
而不是终止操作中进行。并行的最佳操作是做减法,如reduce
、min
、max
、count
、sum
等等。"骤死式操作",比如anyMatch
、allMatch
等等也可以。collect
操作的性能不会很好,因为合并集合的代价比较高
思考
- 适合使用
parallelStream
的场景还是相对较少的,比较典型的像并发call外部接口,可能单次会耗时几秒钟,如果使用并行流的话性能会有所提升
- 使用
parallelStream
还是需要注意,尽量保证单个task执行很快并且这个方法本身并发不会很高。并行流本身应该还是创建了线程池,如果方法并发很高,每次执行都创建线程池,容易造成OOM
本文标题:Effective Java - 谨慎使用Stream并行
本文链接:https://www.haomeiwen.com/subject/goevirtx.html
网友评论