Channel::__construct

(PHP 8.6+, True Async 1.0)

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

Crea un nuovo canale per il passaggio di dati tra coroutine.

Un canale e’ una primitiva di sincronizzazione che consente alle coroutine di scambiare dati in modo sicuro. Il comportamento del canale dipende dal parametro $capacity:

Parametri

capacity
La capacita’ del buffer interno del canale. 0 — canale rendezvous (predefinito), send blocca fino a receive. Numero positivo — dimensione del buffer.

Esempi

Esempio #1 Canale rendezvous (non bufferizzato)

<?php

use Async\Channel;

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

spawn(function() use ($channel) {
    $channel->send('hello'); // si sospende fino a quando qualcuno chiama recv()
    echo "Inviato\n";
});

spawn(function() use ($channel) {
    $value = $channel->recv(); // riceve 'hello', sblocca il mittente
    echo "Ricevuto: $value\n";
});

Esempio #2 Canale bufferizzato

<?php

use Async\Channel;

$channel = new Channel(3); // buffer per 3 elementi

spawn(function() use ($channel) {
    $channel->send(1); // non blocca — buffer vuoto
    $channel->send(2); // non blocca — spazio disponibile
    $channel->send(3); // non blocca — ultimo slot
    $channel->send(4); // si sospende — buffer pieno
});

Vedi anche