Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación concurrente / Canales
Enviar y recibir
Crea un canal con Channel.new. Mete valores con
.send y sácalos con .receive:
my $c = Channel.new;
$c.send(1);
$c.send(2);
say $c.receive; # 1
say $c.receive; # 2Un canal es una cola: los valores salen en el mismo
orden en que entraron, el primero en entrar es el primero en salir. Así
que el primer .receive devuelve 1, el valor
enviado primero.
La gracia de un canal está en que enviar y recibir se pueden hacer sin peligro desde hilos distintos al mismo tiempo. Un productor puede seguir enviando mientras un consumidor sigue recibiendo, y Raku se asegura de que ningún valor se pierda ni se duplique:
my $c = Channel.new;
start {
$c.send($_) for 1..3;
$c.close;
}
say $c.receive; # 1Aquí una tarea en segundo plano envía 1, 2, 3; el
programa principal recibe. .receive espera si el canal está
momentáneamente vacío, así que el consumidor nunca se adelanta al
productor.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Canales | Quiz — Canales →
💪 O ve directamente a los ejercicios de esta
sección.