array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'zh', ), 'this' => array ( 0 => 'class.parallel-channel.php', 1 => 'parallel\\Channel', ), 'up' => array ( 0 => 'book.parallel.php', 1 => 'parallel', ), 'prev' => array ( 0 => 'parallel-future.value.php', 1 => 'parallel\\Future::value', ), 'next' => array ( 0 => 'parallel-channel.construct.php', 1 => 'parallel\\Channel::__construct', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'en', 'path' => 'reference/parallel/parallel.channel.xml', ), 'extra_header_links' => array ( 'rel' => 'alternate', 'href' => '/manual/en/feeds/class.parallel-channel.atom', 'type' => 'application/atom+xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(0.9.0)
An unbuffered channel will block on calls to parallel\Channel::send() until there is a receiver, and block on calls to parallel\Channel::recv() until there is a sender. This means an unbuffered channel is not only a way to share data among tasks but also a simple method of synchronization.
An unbuffered channel is the fastest way to share data among tasks, requiring the least copying.
A buffered channel will not block on calls to parallel\Channel::send() until capacity is reached, calls to parallel\Channel::recv() will block until there is data in the buffer.
A powerful feature of parallel channels is that they allow the exchange of closures between tasks (and runtimes).
When a closure is sent over a channel the closure is buffered, it doesn't change the buffering of the channel transmitting the closure, but it does effect the static scope inside the closure: The same closure sent to different runtimes, or the same runtime, will not share their static scope.
This means that whenever a closure is executed that was transmitted by a channel, static state will be as it was when the closure was buffered.
The anonymous channel constructor allows the programmer to avoid assigning names to every channel: parallel will generate a unique name for anonymous channels.