Channel::__construct

(PHP 8.6+, True Async 1.0)

public Channel::__construct(int $capacity = 0)

Создаёт новый канал для передачи данных между корутинами.

Канал — это примитив синхронизации, позволяющий корутинам безопасно обмениваться данными. Поведение канала зависит от параметра $capacity:

Параметры

capacity
Ёмкость внутреннего буфера канала. 0 — канал-рандеву (по умолчанию), отправка блокирует до получения. Положительное число — размер буфера.

Примеры

Пример #1 Канал-рандеву (unbuffered)

<?php

use Async\Channel;

$channel = new Channel(); // capacity = 0

spawn(function() use ($channel) {
    $channel->send('привет'); // приостановится, пока кто-то не вызовет recv()
    echo "Отправлено\n";
});

spawn(function() use ($channel) {
    $value = $channel->recv(); // получит 'привет', разблокирует отправителя
    echo "Получено: $value\n";
});

Пример #2 Буферизованный канал

<?php

use Async\Channel;

$channel = new Channel(3); // буфер на 3 элемента

spawn(function() use ($channel) {
    $channel->send(1); // не блокирует — буфер пуст
    $channel->send(2); // не блокирует — место есть
    $channel->send(3); // не блокирует — последний слот
    $channel->send(4); // приостановится — буфер полон
});

См. также