Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Канали | Тест — Канали →
💪 Или преминете направо към упражненията в този
раздел.