Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Конкурентне програмування / Канали
Надсилання та отримання
Створіть канал за допомогою Channel.new. Кладіть
значення всередину через .send, а забирайте через
.receive:
my $c = Channel.new;
$c.send(1);
$c.send(2);
say $c.receive; # 1
say $c.receive; # 2Канал є чергою: значення виходять у тому самому
порядку, у якому зайшли, — перший прийшов, перший вийшов. Тож перший
.receive повертає 1, тобто значення, надіслане
першим.
Сенс каналу в тому, що надсилати й отримувати безпечно з різних потоків виконання водночас. Виробник може й далі надсилати, поки споживач і далі отримує, а Raku подбає, щоб жодне значення не загубилося й не задвоїлося:
my $c = Channel.new;
start {
$c.send($_) for 1..3;
$c.close;
}
say $c.receive; # 1Тут фонова задача надсилає 1, 2, 3; головна програма
отримує. .receive чекає, якщо канал наразі порожній, тож
споживач ніколи не забігає поперед виробника.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Канали | Тест — Канали →
💪 Або перейдіть одразу до вправ цього розділу.