Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Samtempa programado / hyper kaj race 🆕
Neordigita paraleleco per race
.race paraleligas same kiel .hyper, kun unu
diferenco: ĝi ne promesas redoni la rezultojn en ordo.
Kiu ajn laboranto finas unue, kontribuas sian rezulton unue.
say (1..10).race.map(* ** 2).sort; # (1 4 9 16 25 36 49 64 81 100)La kvadratoj revenas en neantaŭvidebla ordo, do la .sort
estas tie por fari la eligon determinisma. Se ni estus presintaj sen
ordigi, la nombroj ĉiuj ĉeestus sed eble miksitaj.
Ĉar ĝi ne devas teni la rezultojn ordigitaj, .race povas
havi iomete malpli da ŝarĝo ol .hyper. La kompromiso estas
simpla:
- uzu
.hyper, kiam la ordo de la rezultoj gravas; - uzu
.race, kiam ĝi ne gravas — ekzemple, kiam vi sumos, nombros aŭ alimaniere kombinos la rezultojn en ord-sendependa maniero.
say (1..100).race.map(* * 2).sum; # 10100Sumado estas ord-sendependa, do .race estas bona elekto
ĉi tie kaj donas la saman 10100. Ambaŭ metodoj temas pri la
sama ideo — lasi sendependan laboron kuri samtempe — kaj vi elektas
inter ili laŭ tio, ĉu la ordigo gravas por vi.
Kursa navigado
← Kvizo — hyper | Agordi per :batch kaj :degree →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.