Класс parallel\Channel
(0.9.0)
Небуферизованные Каналы
Небуферизованный канал будет блокировать вызовы parallel\Channel::send() до тех пор, пока не появится приемник, и блокировать вызовы parallel\Channel::recv() до тех пор, пока не появится отправитель. Это означает, что небуферизованный канал является не только способом обмена данными между задачами, но и простым методом синхронизации.
Небуферизованный канал-это самый быстрый способ обмена данными между задачами, требующий наименьшего копирования.
Буферизованные Каналы
Буферизованный канал не будет блокировать вызовы parallel\Channel::send() до тех пор, пока не будет достигнута емкость, вызовы parallel\Channel::recv() будут блокироваться до тех пор, пока в буфере не появятся данные.
Закрытие каналов
Мощная особенность параллельных каналов заключается в том, что они позволяют обмениваться замыканиями между задачами (и средами выполнения).
Когда закрытие посылается по каналу, закрытие буферизуется, это не изменяет буферизацию канала, передающего закрытие, но влияет на статическую область внутри закрытия: одно и то же закрытие, отправленное в различные периоды времени выполнения, или то же время выполнения, не будет совместно использовать их статическую область.
Это означает, что всякий раз, когда выполняется закрытие, которое было передано каналом, статическое состояние будет таким же, как и при буферизации закрытия.
Анонимные каналы
Конструктор анонимных каналов позволяет программисту избежать назначения имен каждому каналу: параллель создаст уникальное имя для анонимных каналов.
Обзор классов
final parallel\Channel { /* Анонимный Конструктор */ public __construct ( void ) public __construct ( int $capacity ) /* Доступ */ public make ( string $name ) : Channel public make ( string $name , int $capacity ) : Channel public open ( string $name ) : Channel /* Разделение */ public recv ( void ) : mixed public send ( mixed $value ) : void /* Закрытие */ public close ( void ) : void /* Константа для бесконечной буферизации */ const Infinite ; }