scala中的Builder,Combiner和Splitter是什么?

Lif*_*ang 5 collections parallel-processing scala

在从EPFL并行编程过程中,4个抽象数据并行提到:Iterator,Builder,Combiner,和Splitter.

我很熟悉Iterator,但从未使用过其他三个.我所看到的其他特征Builder,CombinerSplitterscala.collection包.不过,我知道如何在现实世界的发展使用它们,特别是如何在合作与其他收藏品一样使用它们List,Array,ParArray等任何人都可以请给我一些指导和实例?

谢谢!

fxl*_*lae 9

这两个特质IteratorBuilder不特定于并行性,但是它们提供依据CombinerSplitter.

  • 您已经知道,Iterator通过提供方法hasNext和方法,可以帮助您迭代顺序集合next.A Splitter是一个特例Iterator,有助于将集合划分为多个不相交的子集.这个想法是在分裂之后,可以并行处理这些子集.您可以Splitter通过调用从并行集合中获取.splitter.这一Splitter特质的两个重要方法如下:
    • remaining: Int:返回当前集合的元素数,或至少是该数字的近似值.这些信息很重要,因为它用于决定是否值得分割集合.如果您的集合仅包含少量元素,那么您希望按顺序处理这些元素,而不是将集合拆分为更小的子集.
    • split: Seq[Splitter[A]]:实际拆分当前集合的方法.它返回不相交的子集(表示为Splitters),如果它值得,可以递归地再次分割.如果子集足够小,则最终可以处理它们(例如,过滤或映射).
  • Builders在内部用于创建新的(顺序)集合.A Combiner是a的特例,Builder同时代表对应的Splitter.虽然Splitter在并行处理之前拆分您的集合,然后Combiner将结果放在一起.您可以Combiner通过调用并行集合(子集)来获取.newCombiner它.这可以通过以下方法完成:
    • combine(that: Combiner[A, B]): Combiner[A, B]:通过"合并"两个来将您当前的集合与另一个集合相结合Combiner.结果是new Combiner,它表示最终结果,或者再次与另一个子集组合(顺便说一下:类型参数A,B表示元素类型和类型或结果集合).

问题是,如果没有定义新的并行集合,则不需要直接实现甚至直接使用这些方法.我们的想法是,实现新并行集合的人只需要定义分离器和组合器,并免费获得大量其他操作,因为这些操作已经实现并使用分离器和组合器.

当然,这只是对这些事情如何运作的肤浅描述.为了进一步阅读,我建议阅读并行集合库的体系结构以及创建自定义并行集合.