Hea*_*ren 6 java parallel-processing reduce java-8 java-stream
约书亚布洛赫在<Effective Java> (Third Edition)
提到
Stream的collect方法执行的操作(称为 可变约简)不是并行性的良好候选者,因为组合集合的开销很昂贵.
我阅读了有关Mutable减少的文档,但我仍然不太清楚为什么减少不是并行性的好选择.是synchronization
吗?
正如@Ravindra Ranwala指出的那样(我还在减少,并发和订购文档上看到了这一点):
实际上并行地执行操作可能适得其反.这是因为组合步骤(通过键将一个Map合并到另一个Map)对于某些Map实现来说可能是昂贵的.
如果是这样,那么我们需要关注的其他主要因素可能导致性能低下吗?
不,这与此无关synchronization
.考虑一下有100万个Person
物体,需要找出所有people
住在纽约的人.那么典型的流管道就是,
people.parallelStream()
.filter(p -> p.getState().equals("NY"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
考虑并行执行此查询.假设我们有10个线程并行执行它.每个线程都会将自己的数据集累积到一个单独的本地容器中.最后,合并10个结果容器以形成一个大容器.这种合并将是昂贵的,并且是并行执行引入的额外步骤.因此,并行执行可能并不总是更快.有时,顺序执行可能比并行计数器部分更快.
所以总是从顺序执行开始.如果这只是有意义的话,你可能会在稍后的某个时间点回到它的并行对应物.
归档时间: |
|
查看次数: |
225 次 |
最近记录: |