scala.collection.parallel.immutable

Members list

Type members

Classlikes

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
class ParHashMap[K, +V] extends ParMap[K, V], GenericParMapTemplate[K, V, ParHashMap], ParMapLike[K, V, ParHashMap, ParHashMap[K, V], OldHashMap[K, V]], Serializable

Immutable parallel hash map, based on hash tries.

Immutable parallel hash map, based on hash tries.

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.

Type parameters

K

the key type of the map

V

the value type of the map

Attributes

See also

Scala's Parallel Collections Library overview section on Parallel Hash Tries for more information.

Companion
object
Supertypes
trait Serializable
trait ParMap[K, V]
trait ParMapLike[K, V, ParHashMap, ParHashMap[K, V], OldHashMap[K, V]]
trait ParIterable[(K, V)]
trait ParMap[K, V]
trait ParMapLike[K, V, ParHashMap, ParHashMap[K, V], OldHashMap[K, V]]
trait Equals
trait ParIterable[(K, V)]
trait ParIterableLike[(K, V), ParIterable, ParHashMap[K, V], OldHashMap[K, V]]
trait Parallel
trait CustomParallelizable[(K, V), ParHashMap[K, V]]
trait Parallelizable[(K, V), ParHashMap[K, V]]
trait IterableOnce[(K, V)]
trait HasNewCombiner[(K, V), ParHashMap[K, V]]
trait HasNewBuilder[(K, V), ParIterable[(K, V)]]
class Object
trait Matchable
class Any
Show all
Self type
ParHashMap[K, V]

This object provides a set of operations needed to create ParMap values.

This object provides a set of operations needed to create ParMap values.

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
ParHashMap.type

Immutable parallel hash set, based on hash tries.

Immutable parallel hash set, based on hash tries.

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.

Type parameters

T

the element type of the set

Attributes

See also

Scala's Parallel Collections Library overview section on Parallel Hash Tries for more information.

Companion
object
Supertypes
trait Serializable
trait ParSet[T]
trait ParIterable[T]
trait ParSet[T]
trait Equals
trait T => Boolean
trait ParIterable[T]
trait Parallel
trait Parallelizable[T, ParHashSet[T]]
trait IterableOnce[T]
trait HasNewCombiner[T, ParHashSet[T]]
trait HasNewBuilder[T, ParHashSet[T]]
class Object
trait Matchable
class Any
Show all
Self type

This object provides a set of operations needed to create ParIterable values.

This object provides a set of operations needed to create ParIterable values.

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
ParHashSet.type

A template trait for immutable parallel iterable collections.

A template trait for immutable parallel iterable collections.

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.

Type parameters

T

the element type of the collection

Attributes

Companion
object
Supertypes
trait ParIterable[T]
trait Parallel
trait IterableOnce[T]
trait HasNewBuilder[T, ParIterable[T]]
class Object
trait Matchable
class Any
Show all
Known subtypes
trait ParMap[K, V]
class ParHashMap[K, V]
class WithDefault[K, V]
trait ParSeq[T]
class ParRange
class ParVector[T]
trait ParSet[T]
class ParHashSet[T]
Show all

This object provides a set of operations needed to create ParIterable values.

This object provides a set of operations needed to create ParIterable values.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
trait ParMap[K, +V] extends GenericParMapTemplate[K, V, ParMap], ParMap[K, V], ParIterable[(K, V)], ParMapLike[K, V, ParMap, ParMap[K, V], Map[K, V]]

A template trait for immutable parallel maps.

A template trait for immutable parallel maps.

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.

Type parameters

K

the key type of the map

V

the value type of the map

Attributes

Companion
object
Supertypes
trait ParMapLike[K, V, ParMap, ParMap[K, V], Map[K, V]]
trait ParIterable[(K, V)]
trait ParMap[K, V]
trait ParMapLike[K, V, ParMap, ParMap[K, V], Map[K, V]]
trait Equals
trait ParIterable[(K, V)]
trait ParIterableLike[(K, V), ParIterable, ParMap[K, V], Map[K, V]]
trait Parallel
trait CustomParallelizable[(K, V), ParMap[K, V]]
trait Parallelizable[(K, V), ParMap[K, V]]
trait IterableOnce[(K, V)]
trait HasNewCombiner[(K, V), ParMap[K, V]]
trait HasNewBuilder[(K, V), ParIterable[(K, V)]]
class Object
trait Matchable
class Any
Show all
Known subtypes
class ParHashMap[K, V]
class WithDefault[K, V]
Self type
ParMap[K, V]
object ParMap extends ParMapFactory[ParMap, Map]

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
ParMap.type
trait ParMapLike[K, +V, +CC <: (ParMap), +Repr <: ParMapLike[K, V, ParMap, Repr, Sequential] & ParMap[K, V], +Sequential <: Map[K, V] & MapOps[K, V, Map, Sequential]] extends ParMapLike[K, V, CC, Repr, Sequential], ParIterableLike[(K, V), ParIterable, Repr, Sequential]

Attributes

Supertypes
trait ParMapLike[K, V, CC, Repr, Sequential]
trait Equals
trait ParIterableLike[(K, V), ParIterable, Repr, Sequential]
trait HasNewCombiner[(K, V), Repr]
trait Parallel
trait CustomParallelizable[(K, V), Repr]
trait Parallelizable[(K, V), Repr]
trait IterableOnce[(K, V)]
class Object
trait Matchable
class Any
Show all
Known subtypes
class ParHashMap[K, V]
trait ParMap[K, V]
class WithDefault[K, V]
class ParRange(val range: Range) extends ParSeq[Int], Serializable

Parallel ranges.

Parallel ranges.

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.

Value parameters

range

the sequential range this parallel range was obtained from

Attributes

See also

Scala&apos;s Parallel Collections Library overview section on ParRange for more information.

Companion
object
Supertypes
trait Serializable
trait ParSeq[Int]
trait ParIterable[Int]
trait ParSeq[Int]
trait Equals
trait ParIterable[Int]
trait Parallel
trait IterableOnce[Int]
class Object
trait Matchable
class Any
Show all
Self type
object ParRange

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
ParRange.type
trait ParSeq[+T] extends ParSeq[T], ParIterable[T], GenericParTemplate[T, ParSeq], ParSeqLike[T, ParSeq, ParSeq[T], Seq[T]]

An immutable variant of ParSeq.

An immutable variant of ParSeq.

Attributes

Companion
object
Supertypes
trait ParIterable[T]
trait ParSeq[T]
trait ParSeqLike[T, ParSeq, ParSeq[T], Seq[T]]
trait Equals
trait ParIterable[T]
trait ParIterableLike[T, ParSeq, ParSeq[T], Seq[T]]
trait Parallel
trait Parallelizable[T, ParSeq[T]]
trait IterableOnce[T]
trait HasNewCombiner[T, ParSeq[T]]
trait HasNewBuilder[T, ParSeq[T]]
class Object
trait Matchable
class Any
Show all
Known subtypes
class ParRange
class ParVector[T]
object ParSeq extends ParFactory[ParSeq]

This object provides a set of operations needed to create ParIterable values.

This object provides a set of operations needed to create ParIterable values.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
ParSeq.type
trait ParSet[T] extends GenericParTemplate[T, ParSet], ParSet[T], ParIterable[T], ParSetLike[T, ParSet, ParSet[T], Set[T]]

An immutable variant of ParSet.

An immutable variant of ParSet.

Attributes

Companion
object
Supertypes
trait ParIterable[T]
trait ParSet[T]
trait ParSetLike[T, ParSet, ParSet[T], Set[T]]
trait Equals
trait T => Boolean
trait ParIterable[T]
trait ParIterableLike[T, ParSet, ParSet[T], Set[T]]
trait Parallel
trait Parallelizable[T, ParSet[T]]
trait IterableOnce[T]
trait HasNewCombiner[T, ParSet[T]]
trait HasNewBuilder[T, ParSet[T]]
class Object
trait Matchable
class Any
Show all
Known subtypes
class ParHashSet[T]
Self type
ParSet[T]
object ParSet extends ParSetFactory[ParSet]

This object provides a set of operations needed to create ParIterable values.

This object provides a set of operations needed to create ParIterable values.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
ParSet.type
class ParVector[+T](vector: Vector[T]) extends ParSeq[T], GenericParTemplate[T, ParVector], ParSeqLike[T, ParVector, ParVector[T], Vector[T]], Serializable

Immutable parallel vectors, based on vectors.

Immutable parallel vectors, based on vectors.

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.

Type parameters

T

the element type of the vector

Attributes

See also

Scala&apos;s Parallel Collections Library overview section on ParVector for more information.

Companion
object
Supertypes
trait Serializable
trait ParSeq[T]
trait ParIterable[T]
trait ParSeq[T]
trait ParSeqLike[T, ParVector, ParVector[T], Vector[T]]
trait Equals
trait ParIterable[T]
trait Parallel
trait Parallelizable[T, ParVector[T]]
trait IterableOnce[T]
trait HasNewCombiner[T, ParVector[T]]
trait HasNewBuilder[T, ParVector[T]]
class Object
trait Matchable
class Any
Show all
object ParVector extends ParFactory[ParVector]

This object provides a set of operations needed to create ParIterable values.

This object provides a set of operations needed to create ParIterable values.

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
ParVector.type

Value members

Concrete methods

def repetition[T](elem: T, len: Int): Repetition[T]