Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Channels.
Channels are pipelines of values where threads can push into one end, and pull from the other end.
Unlike Moonpool.Blocking_queue
, channels are designed so that pushing never blocks, and pop'ing values returns a future.
type 'a or_error = 'a Fut.or_error
val create : unit -> 'a t
Create a channel.
val push : 'a t -> 'a -> unit
push chan x
pushes x
into chan
. This does not block.
Pop an element. This returns a future that will be fulfilled when an element is available.
val try_pop : 'a t -> 'a option
try_pop chan
pops and return an element if one is available immediately. Otherwise it returns None
.
val pop_block_exn : 'a t -> 'a
Like pop
, but blocks if an element is not available immediately. The precautions around blocking from inside a thread pool are the same as explained in Fut.wait_block
.
val close : _ t -> unit
Close the channel. Further push and pop calls will fail. This is idempotent.