Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Канали   |   Тест — Канали


💪 Или преминете направо към упражненията в този раздел.