Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Nebenläufige Programmierung / Channels
Senden und empfangen
Erzeugen Sie einen Kanal mit Channel.new. Legen Sie
Werte mit .send hinein und nehmen Sie sie mit
.receive heraus:
my $c = Channel.new;
$c.send(1);
$c.send(2);
say $c.receive; # 1
say $c.receive; # 2Ein Kanal ist eine Warteschlange: Werte kommen in
derselben Reihenfolge heraus, in der sie hineingingen — first in, first
out. Die erste .receive liefert also 1, den
zuerst gesendeten Wert.
Der Sinn eines Kanals ist, dass Senden und Empfangen zugleich aus verschiedenen Threads heraus sicher sind. Ein Erzeuger kann weiter senden, während ein Verbraucher weiter empfängt, und Raku sorgt dafür, dass kein Wert verloren geht oder doppelt auftaucht:
my $c = Channel.new;
start {
$c.send($_) for 1..3;
$c.close;
}
say $c.receive; # 1Hier sendet eine Hintergrundaufgabe 1, 2, 3; das
Hauptprogramm empfängt. .receive wartet, wenn der Kanal
gerade leer ist, der Verbraucher überholt den Erzeuger also nie.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Channels | Quiz — Channels →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.