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:
capacity = 0— canale rendezvous (non bufferizzato). L’operazionesend()sospende il mittente fino a quando un’altra coroutine chiamarecv(). Questo garantisce il trasferimento sincrono dei dati.capacity > 0— canale bufferizzato. L’operazionesend()non blocca finche’ c’e’ spazio nel buffer. Quando il buffer e’ pieno, il mittente viene sospeso fino a quando non si libera spazio.
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
- Channel::send — Invia un valore al canale
- Channel::recv — Ricevi un valore dal canale
- Channel::capacity — Ottieni la capacita’ del canale
- Channel::close — Chiudi il canale