scalaz.concurrent

Type members

Classlikes

final case
class Actor[A](handler: A => Unit, onError: Throwable => Unit)(implicit strategy: Strategy)

Processes messages of type A, one at a time. Messages are submitted to the actor with the method !. Processing is typically performed asynchronously, this is controlled by the provided strategy.

Processes messages of type A, one at a time. Messages are submitted to the actor with the method !. Processing is typically performed asynchronously, this is controlled by the provided strategy.

Memory consistency guarantee: when each message is processed by the handler, any memory that it mutates is guaranteed to be visible by the handler when it processes the next message, even if the strategy runs the invocations of handler on separate threads. This is achieved because the Actor reads a volatile memory location before entering its event loop, and writes to the same location before suspending.

Implementation based on non-intrusive MPSC node-based queue, described by Dmitriy Vyukov: http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue

Type Params
A

The type of messages accepted by this actor.

Value Params
handler

The message handler

onError

Exception handler, called if the message handler throws any Throwable.

strategy

Execution strategy, for example, a strategy that is backed by an ExecutorService

Companion
object
object Actor extends ActorInstances with ActorFunctions
Companion
class
sealed abstract
trait Atomic[A]
Companion
object
object Atomic extends Atomics
Companion
class
trait Atomics
Companion
object
Companion
class
sealed abstract
class Chan[A]
Companion
object
object Chan
Companion
class
object Concurrent extends Concurrents
sealed abstract
class Future[+A]

Future is a trampolined computation producing an A that may include asynchronous steps. Like Trampoline, arbitrary monadic expressions involving map and flatMap are guaranteed to use constant stack space. But in addition, one may construct a Future from an asynchronous computation, represented as a function, listen: (A => Unit) => Unit, which registers a callback that will be invoked when the result becomes available. This makes Future useful as a concurrency primitive and as a control structure for wrapping callback-based APIs with a more straightforward, monadic API.

Future is a trampolined computation producing an A that may include asynchronous steps. Like Trampoline, arbitrary monadic expressions involving map and flatMap are guaranteed to use constant stack space. But in addition, one may construct a Future from an asynchronous computation, represented as a function, listen: (A => Unit) => Unit, which registers a callback that will be invoked when the result becomes available. This makes Future useful as a concurrency primitive and as a control structure for wrapping callback-based APIs with a more straightforward, monadic API.

Unlike the Future implementation in scala 2.10, map and flatMap do NOT spawn new tasks and do not require an implicit ExecutionContext. Instead, map and flatMap merely add to the current (trampolined) continuation that will be run by the 'current' thread, unless explicitly forked via Future.fork or Future.apply. This means that Future achieves much better thread reuse than the 2.10 implementation and avoids needless thread pool submit cycles.

Future also differs from the scala 2.10 Future type in that it does not necessarily represent a running computation. Instead, we reintroduce nondeterminism explicitly using the functions of the scalaz.Nondeterminism interface. This simplifies our implementation and makes code easier to reason about, since the order of effects and the points of nondeterminism are made fully explicit and do not depend on Scala's evaluation order.

IMPORTANT NOTE: Future does not include any error handling and should generally only be used as a building block by library writers who want to build on Future's capabilities but wish to design their own error handling strategy. See scalaz.concurrent.Task for a type that extends Future with proper error handling -- it is merely a wrapper for Future[Throwable \/ A] with a number of additional convenience functions.

Companion
object
object Future
Companion
class
sealed abstract
class MVar[A]
Companion
object
object MVar extends MVarFunctions
Companion
class
sealed abstract
Companion
object
object PhasedLatch extends PhasedLatches
Companion
class
trait Run[F]
Companion
object
object Run
Companion
class
trait Strategy

Evaluate an expression in some specific manner. A typical strategy will schedule asynchronous evaluation and return a function that, when called, will block until the result is ready.

Evaluate an expression in some specific manner. A typical strategy will schedule asynchronous evaluation and return a function that, when called, will block until the result is ready.

Memory consistency effects: Actions in a thread prior to the submission of a to the Strategy happen-before any actions taken by a, which in turn happen-before the result is retrieved via returned function.

Companion
object
object Strategy extends Strategys
Companion
class
trait Strategys extends StrategysLow
class Task[+A](val get: Future[Throwable \/ A])

Task[A] wraps a scalaz.concurrent.Future[Throwable \/ A], with some convenience functions for handling exceptions. Its Monad and Nondeterminism instances are derived from Future.

Task[A] wraps a scalaz.concurrent.Future[Throwable \/ A], with some convenience functions for handling exceptions. Its Monad and Nondeterminism instances are derived from Future.

Task (and Future) differ in several key ways from the Future implementation in Scala 2.10 , and have a number of advantages. See the documentation for scalaz.concurrent.Future for more information.

Task is exception-safe when constructed using the primitives in the companion object, but when calling the constructor, you are responsible for ensuring the exception safety of the provided Future.

Companion
object
object Task
Companion
class
trait TaskApp

Safe App trait that runs a scalaz.concurrent.Task action.

Safe App trait that runs a scalaz.concurrent.Task action.

Clients should implement run, runl, or runc.

trait Timeout
Companion
object
object Timeout extends Timeout
Companion
class
case
class Timer(timeoutTickMs: Int, workerName: String)
Companion
object
object Timer
Companion
class