首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala中的Builder、Combiner和Splitter是什么?

scala中的Builder、Combiner和Splitter是什么?
EN

Stack Overflow用户
提问于 2016-10-18 02:57:19
回答 1查看 816关注 0票数 8

在EPFL的并行编程过程中,提出了数据并行的四种抽象:IteratorBuilderCombinerSplitter

我熟悉Iterator,但从未使用过其他三种。我见过BuilderCombinerSplitterscala.collection包下的其他特性。然而,我知道如何在现实世界的开发中使用它们,特别是如何与其他集合(如ListArrayParArray等)协作使用它们。请给我一些指导和示例。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 13:12:35

IteratorBuilder这两个性状并不是特定于并行性的,但它们为CombinerSplitter提供了基础。

  • 您已经知道,Iterator可以通过提供hasNextnext方法来帮助您迭代顺序集合。SplitterIterator的特例,它有助于将集合划分为多个不相交的子集。其思想是,在分裂后,这些子集可以并行处理。通过调用并行集合上的Splitter,您可以从并行集合中获得一个.splitterSplitter特征的两种重要方法是:
    • remaining: Int:返回当前集合的元素数,或至少返回该数的近似值。这个信息很重要,因为它用于决定是否值得拆分集合。如果您的集合只包含少量的元素,那么您希望按顺序处理这些元素,而不是将集合分割成更小的子集。
    • split: Seq[Splitter[A]]:实际拆分当前集合的方法。它返回不相交子集(表示为Splitters),如果值得的话,可以递归地拆分这些子集。如果子集足够小,它们最终可以被处理(例如,过滤或映射)。

  • Builder在内部用于创建新的(顺序的)集合。CombinerBuilder的特例,同时表示Splitter的对应项。当Splitter在并行处理集合之前将其拆分,Combiner则会将结果放在一起。通过调用并行集合(子集)上的Combiner,您可以从它获得一个.newCombiner。这是通过以下方法完成的:
    • combine(that: Combiner[A, B]): Combiner[A, B]:通过“合并”两个Combiner的方法将当前集合与另一个集合组合在一起。结果是一个新的Combiner,它要么表示最终结果,要么再次与另一个子集组合(顺便说一句:类型参数AB表示元素类型和类型或结果集合)。

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

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40098794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档