# Класс parallel\Channel

(0.9.0)

## Небуферизованные каналы

Небуферизованный канал будет блокироваться при вызовах parallel\Channel::send() до тех пор, пока не появится получатель, и блокироваться при вызовах parallel\Channel::recv() до тех пор, пока не появится отправитель. Это означает, что небуферизованный канал - это не только способ обмена данными между задачами, но и простой метод синхронизации.

Небуферизованный канал - это самый быстрый способ обмена данными между задачами, требующий наименьшего количества копирования.

## Буферизованные каналы

Буферизованный канал не будет блокироваться при вызовах parallel\Channel::send() до заполнения буфера, а вызовы parallel\Channel::recv() будут блокироваться до тех пор, пока в буфере есть данные.

## Замыкания поверх каналов

Мощная особенность параллельных каналов состоит в том, что они позволяют обмениваться замыканиями между задачами (и средами выполнения).

Когда замыкание отправляется по каналу, оно буферизуется, не меняет буферизацию канала, передающего замыкание, но оно влияет на статическую область видимости внутри замыкания: одно и то же замыкание, отправленное в разные среды выполнения или в одну и ту же среду выполнения, не будет делиться своей статической областью.

Это означает, что всякий раз, когда выполняется замыкание, которое было передано каналом, статическое состояние будет таким, каким оно было при буферизации замыкания.

## Анонимные каналы

Конструктор анонимного канала позволяет программисту избегать присвоения имён каждому каналу: parallel генерирует уникальное имя для анонимных каналов.

## Обзор класса

final class parallel\Channel {
/* Анонимный конструктор */
public function __construct()
public function __construct(int `$capacity`)
/* Доступ */
public function make(string `$name`): Channel
public function make(string `$name`, int `$capacity`): Channel
public function open(string `$name`): Channel
/* Совместное использование */
public function recv(): mixed
public function send(mixed `$value`): void
/* Закрытие */
public function close(): void
/* Константа для бесконечной буферизации */
const Infinite;
}

## Содержание

- parallel\Channel::__construct — Конструктор класса Channel
- parallel\Channel::make — Доступ
- parallel\Channel::open — Доступ
- parallel\Channel::recv — Совместное использование
- parallel\Channel::send — Совместное использование
- parallel\Channel::close — Закрытие

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open