Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Paralēlā programmēšana / hyper un race 🆕
Nesakārtots paralēlisms ar race
.race paralelizē tāpat kā .hyper, ar vienu
atšķirību: tā nesola atgriezt rezultātus secībā. Kurš
darbinieks pabeidz pirmais, tā rezultāts nonāk pirmais.
say (1..10).race.map(* ** 2).sort; # (1 4 9 16 25 36 49 64 81 100)Kvadrāti atgriežas neparedzamā secībā, tāpēc .sort ir
klāt, lai izvade būtu noteikta. Ja mēs izdrukātu bez kārtošanas, visi
skaitļi būtu klāt, bet, iespējams, sajaukti.
Tā kā tai nav jāpatur rezultāti sakārtoti, .race var būt
mazliet mazākas pieskaitāmās izmaksas nekā .hyper.
Kompromiss ir vienkāršs:
- izmantojiet
.hyper, kad svarīga ir rezultātu secība; - izmantojiet
.race, kad tā nav svarīga — piemēram, kad jūs rezultātus gatavojaties saskaitīt, saskaitīt elementus vai citādi apvienot no secības neatkarīgā veidā.
say (1..100).race.map(* * 2).sum; # 10100Saskaitīšana ir neatkarīga no secības, tāpēc .race šeit
ir laba izvēle un dod to pašu 10100. Abas metodes ir par
vienu un to pašu domu — ļaut neatkarīgam darbam notikt vienlaikus —, un
starp tām izvēlas pēc tā, vai jums rūp secība.
Kursa navigācija
← Viktorīna — hyper | Regulēšana ar :batch un :degree →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.