Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Paralēlā programmēšana / Kanāli
Sūtīšana un saņemšana
Kanālu izveido ar Channel.new. Vērtības tajā ieliek ar
.send un izņem ar .receive:
my $c = Channel.new;
$c.send(1);
$c.send(2);
say $c.receive; # 1
say $c.receive; # 2Kanāls ir rinda: vērtības iznāk tādā pašā secībā,
kādā tās iegāja — pirmais iekšā, pirmais ārā. Tāpēc pirmais
.receive atgriež 1, vērtību, kas nosūtīta
pirmā.
Kanāla jēga ir tā, ka sūtīt un saņemt ir droši no dažādiem pavedieniem vienlaikus. Ražotājs var turpināt sūtīt, kamēr patērētājs turpina saņemt, un Raku gādā, lai neviena vērtība nepazustu un nedubultotos:
my $c = Channel.new;
start {
$c.send($_) for 1..3;
$c.close;
}
say $c.receive; # 1Šeit fona uzdevums sūta 1, 2, 3; galvenā programma
saņem. .receive gaida, ja kanāls uz mirkli ir tukšs, tāpēc
patērētājs nekad neaizskrien ražotājam priekšā.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Kanāli | Viktorīna — Kanāli →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.