Channel::__construct

(PHP 8.6+, True Async 1.0)

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

创建一个用于在协程之间传递数据的新通道。

通道是一种同步原语,允许协程安全地交换数据。 通道的行为取决于 $capacity 参数:

参数

capacity
通道内部缓冲区的容量。 0 — 会合通道(默认),发送方阻塞直到接收方接收。 正数 — 缓冲区大小。

示例

示例 #1 会合通道(无缓冲)

<?php

use Async\Channel;

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

spawn(function() use ($channel) {
    $channel->send('hello'); // 挂起直到有人调用 recv()
    echo "Sent\n";
});

spawn(function() use ($channel) {
    $value = $channel->recv(); // 接收 'hello',解除发送方的阻塞
    echo "Received: $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); // 挂起 — 缓冲区已满
});

参见