1.通过iterate创建的Stream,或者中间使用了limit操作,那并行就不能带来性能提升。
2.在Stream上通过并行获得性能,最好是通过ArrayList、HashMap、HashSet和ConcurrentHashMap实例,数组,int范围和long范围等。主要原因是,他们能被轻松准确地切割成任意块,更容易并行分工。最佳引用局部性的数据结构是基本类型数组,以为数据是相邻存储于内存的。
3.Stream pipeline的终止操作本质上也影响了并发执行的效率。在终止操作有大量依赖顺序的操作时,并行效率就会大受影响。并行较好的终止操作有reduce、min、max、count、sum、anyMatch、allMatch和noneMatch。
4.并行Stream不仅可能降低性能,包括活性失败,还可以导致结果出错,以及难以预计的行为。安全性失败可能是因为并行的pipeline使用了映射、过滤器或者程序员自己编写的其他函数对象,并且没有遵守它们的规范。
5.在适当的条件下(比如机器学习和数据处理),给Stream pipeline添加parallel调用,确实可以在多处理器核的情况下实现近乎线性的倍增
思考:
1.在项目中还没有使用的Stream并行,感觉能使用的地方也比较少,在我们项目中需要通过Stream来提升性能的就更少了。很多情况自己创建多线程而不是用Stream 并行可能更好,Stream 并行很可能使用不当,不但没提升性能,还可能导致出错,以及一些无法预料的行为。所以还是尽量少用Stream并行,在我们项目可以不用。一定要用,也需要进行产品环境同等的性能测试。