Scala并行集合在某些方面是否比Java中已有的并行集合更好?
2022-09-05 00:24:57
我最近一直在学习Java中各种并发库,例如ConcurrentHashMap
和Cliff Click中可爱的非阻塞库。
我对Scala了解不多,但我听说过最近的并行馆藏库的好东西。
我想知道这个库与基于Java的库相比会带来哪些主要优势?
我最近一直在学习Java中各种并发库,例如ConcurrentHashMap
和Cliff Click中可爱的非阻塞库。
我对Scala了解不多,但我听说过最近的并行馆藏库的好东西。
我想知道这个库与基于Java的库相比会带来哪些主要优势?
这两个集合用于不同的用途。
Java的并发集合允许您从并行上下文中使用它们:许多线程可以同时访问它们,并且集合肯定会执行正确的操作(因此调用方不必担心锁等)。
相比之下,Scala的并行集合旨在对自己运行高阶操作,而不必担心创建线程。所以你可以写这样的东西:
myData.par.filter(_.expensiveTest()).map(_.expensiveComputation())
并且过滤器和地图将各自并行执行(但过滤器将在地图开始之前完成)。
稍微扩展一下Rex的答案:Java风格的并发可修改集合在Scala中不是很有趣的原因是它对可模拟数据的偏见:在Scala中实现并发的最常见方法是actor模型(它依赖于不可变的数据),而不是线程。