Orc has no communication primitives like pi-calculus channels[1] or Erlang mailboxes[2]. Instead, it makes use of sites to create channels of communication.
The most frequently used of these sites is Channel
. When called, it
publishes a new asynchronous FIFO channel. That channel is a site with two
methods: get
and put
. The call c.get()
takes the first value from channel c
and publishes it, or blocks
waiting for a value if none is available. The call c.put(v)
puts
v
as the last item of c
and publishes a signal.
A channel may be closed to indicate that it will not be sent any more values.
If the channel c
is closed, c.put(v)
always halts
(without modifying the state of the channel), and c.get()
halts
once c
becomes empty. The channel c
may be closed by
calling either c.close()
, which returns a signal once
c
becomes empty, or c.closeD()
, which returns a
signal immediately.