Packages

  • package root
    Definition Classes
    root
  • package scala
    Definition Classes
    root
  • package collection
    Definition Classes
    scala
  • package parallel

    Package object for parallel collections.

    Package object for parallel collections.

    Definition Classes
    collection
  • trait ParIterableLike[+T, +CC[X] <: ParIterable[X], +Repr <: ParIterable[T], +Sequential <: scala.Iterable[T] with IterableOps[T, scala.Iterable, Sequential]] extends scala.IterableOnce[T] with CustomParallelizable[T, Repr] with Parallel with HasNewCombiner[T, Repr]

    A template trait for parallel collections of type ParIterable[T].

    A template trait for parallel collections of type ParIterable[T].

    This is a base trait for Scala parallel collections. It defines behaviour common to all parallel collections. Concrete parallel collections should inherit this trait and ParIterable if they want to define specific combiner factories.

    Parallel operations are implemented with divide and conquer style algorithms that parallelize well. The basic idea is to split the collection into smaller parts until they are small enough to be operated on sequentially.

    All of the parallel operations are implemented as tasks within this trait. Tasks rely on the concept of splitters, which extend iterators. Every parallel collection defines:

    def splitter: IterableSplitter[T]

    which returns an instance of IterableSplitter[T], which is a subtype of Splitter[T]. Splitters have a method remaining to check the remaining number of elements, and method split which is defined by splitters. Method split divides the splitters iterate over into disjunct subsets:

    def split: Seq[Splitter]

    which splits the splitter into a sequence of disjunct subsplitters. This is typically a very fast operation which simply creates wrappers around the receiver collection. This can be repeated recursively.

    Tasks are scheduled for execution through a scala.collection.parallel.TaskSupport object, which can be changed through the tasksupport setter of the collection.

    Method newCombiner produces a new combiner. Combiners are an extension of builders. They provide a method combine which combines two combiners and returns a combiner containing elements of both combiners. This method can be implemented by aggressively copying all the elements into the new combiner or by lazily binding their results. It is recommended to avoid copying all of the elements for performance reasons, although that cost might be negligible depending on the use case. Standard parallel collection combiners avoid copying when merging results, relying either on a two-step lazy construction or specific data-structure properties.

    Methods:

    def seq: Sequential
    def par: Repr

    produce the sequential or parallel implementation of the collection, respectively. Method par just returns a reference to this parallel collection. Method seq is efficient - it will not copy the elements. Instead, it will create a sequential version of the collection using the same underlying data structure. Note that this is not the case for sequential collections in general - they may copy the elements and produce a different underlying data structure.

    The combination of methods toMap, toSeq or toSet along with par and seq is a flexible way to change between different collection types.

    Since this trait extends the GenIterable trait, methods like size must also be implemented in concrete collections, while iterator forwards to splitter by default.

    Each parallel collection is bound to a specific fork/join pool, on which dormant worker threads are kept. The fork/join pool contains other information such as the parallelism level, that is, the number of processors used. When a collection is created, it is assigned the default fork/join pool found in the scala.parallel package object.

    Parallel collections are not necessarily ordered in terms of the foreach operation (see Traversable). Parallel sequences have a well defined order for iterators - creating an iterator and traversing the elements linearly will always yield the same order. However, bulk operations such as foreach, map or filter always occur in undefined orders for all parallel collections.

    Existing parallel collection implementations provide strict parallel iterators. Strict parallel iterators are aware of the number of elements they have yet to traverse. It's also possible to provide non-strict parallel iterators, which do not know the number of elements remaining. To do this, the new collection implementation must override isStrictSplitterCollection to false. This will make some operations unavailable.

    To create a new parallel collection, extend the ParIterable trait, and implement size, splitter, newCombiner and seq. Having an implicit combiner factory requires extending this trait in addition, as well as providing a companion object, as with regular collections.

    Method size is implemented as a constant time operation for parallel collections, and parallel collection operations rely on this assumption.

    The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

    T

    the element type of the collection

    Repr

    the type of the actual collection containing the elements

    Definition Classes
    parallel
  • Accessor
  • Aggregate
  • BuilderOps
  • Collect
  • Composite
  • Copy
  • CopyToArray
  • Count
  • CreateScanTree
  • Drop
  • Exists
  • Filter
  • FilterNot
  • Find
  • FlatMap
  • Fold
  • Forall
  • Foreach
  • FromScanTree
  • GroupBy
  • Map
  • Max
  • Min
  • NonDivisible
  • NonDivisibleTask
  • ParComposite
  • Partition
  • Product
  • Reduce
  • ResultMapping
  • ScanLeaf
  • ScanNode
  • ScanTree
  • SeqComposite
  • SignallingOps
  • Slice
  • Span
  • SplitAt
  • StrictSplitterCheckTask
  • Sum
  • Take
  • TakeWhile
  • TaskOps
  • ToParCollection
  • ToParMap
  • Transformer
  • Zip
  • ZipAll

class FlatMap[S, That] extends Transformer[Combiner[S, That], FlatMap[S, That]]

Attributes
protected[this]
Linear Supertypes
Transformer[Combiner[S, That], FlatMap[S, That]], Accessor[Combiner[S, That], FlatMap[S, That]], StrictSplitterCheckTask[Combiner[S, That], FlatMap[S, That]], Task[Combiner[S, That], FlatMap[S, That]], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. FlatMap
  2. Transformer
  3. Accessor
  4. StrictSplitterCheckTask
  5. Task
  6. AnyRef
  7. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new FlatMap(f: (T) => scala.IterableOnce[S], pbf: CombinerFactory[S, That], pit: IterableSplitter[T])

Type Members

  1. type Result = Combiner[S, That]
    Definition Classes
    Task

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  9. def forwardThrowable(): Unit
    Definition Classes
    Task
  10. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  12. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  13. def leaf(prev: Option[Combiner[S, That]]): Unit

    Body of the task - non-divisible unit of work done by this task.

    Body of the task - non-divisible unit of work done by this task. Optionally is provided with the result from the previous completed task or None if there was no previous task (or the previous task is uncompleted or unknown).

    Definition Classes
    FlatMapTask
  14. def merge(that: FlatMap[S, That]): Unit

    Read of results of that task and merge them into results of this one.

    Read of results of that task and merge them into results of this one.

    Definition Classes
    FlatMapTask
  15. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  16. def newSubtask(p: IterableSplitter[T]): FlatMap[S, That]
    Attributes
    protected[this]
    Definition Classes
    FlatMapAccessor
  17. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  18. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  19. val pit: IterableSplitter[T]
    Attributes
    protected[this]
    Definition Classes
    FlatMapAccessor
  20. def repr: FlatMap[S, That]
    Definition Classes
    Task
  21. def requiresStrictSplitters: Boolean
    Definition Classes
    StrictSplitterCheckTask
  22. var result: Combiner[S, That]

    A result that can be accessed once the task is completed.

    A result that can be accessed once the task is completed.

    Definition Classes
    FlatMapTask
  23. def shouldSplitFurther: Boolean

    Decides whether or not this task should be split further.

    Decides whether or not this task should be split further.

    Definition Classes
    AccessorTask
  24. def split: immutable.Seq[Accessor[Combiner[S, That], FlatMap[S, That]]]

    Splits this task into a list of smaller tasks.

    Splits this task into a list of smaller tasks.

    Definition Classes
    AccessorTask
  25. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  26. val throwable: Throwable
    Definition Classes
    Task
    Annotations
    @volatile()
  27. def toString(): String
    Definition Classes
    Accessor → AnyRef → Any
  28. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  29. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  30. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from Transformer[Combiner[S, That], FlatMap[S, That]]

Inherited from Accessor[Combiner[S, That], FlatMap[S, That]]

Inherited from StrictSplitterCheckTask[Combiner[S, That], FlatMap[S, That]]

Inherited from Task[Combiner[S, That], FlatMap[S, That]]

Inherited from AnyRef

Inherited from Any

Ungrouped