Channel::__construct
(PHP 8.6+, True Async 1.0)
public Channel::__construct(int $capacity = 0)
Створює новий канал для передачі даних між корутинами.
Канал — це примітив синхронізації, який дозволяє корутинам безпечно обмінюватися даними.
Поведінка каналу залежить від параметра $capacity:
capacity = 0— канал рандеву (без буфера). Операціяsend()призупиняє відправника, доки інша корутина не викличеrecv(). Це забезпечує синхронну передачу даних.capacity > 0— буферизований канал. Операціяsend()не блокується, доки є місце в буфері. Коли буфер заповнений, відправник призупиняється, доки не звільниться місце.
Параметри
- capacity
- Ємність внутрішнього буфера каналу.
0— канал рандеву (за замовчуванням), відправлення блокується до отримання. Додатне число — розмір буфера.
Приклади
Приклад #1 Канал рандеву (без буфера)
<?php
use Async\Channel;
$channel = new Channel(); // capacity = 0
spawn(function() use ($channel) {
$channel->send('hello'); // призупиняється, доки хтось не викличе recv()
echo "Відправлено\n";
});
spawn(function() use ($channel) {
$value = $channel->recv(); // отримує 'hello', розблокує відправника
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); // призупиняється — буфер заповнений
});
Дивіться також
- Channel::send — Відправити значення в канал
- Channel::recv — Отримати значення з каналу
- Channel::capacity — Отримати ємність каналу
- Channel::close — Закрити канал