Párhuzamos számítással számold meg a betűk gyakoriságát szövegekben.
A párhuzamosság lényege, hogy olyan dolgokat végzünk párhuzamosan, amelyeket sorosan is el lehet végezni. Gyakori példa erre a betűk gyakoriságának megszámolása. Használj párhuzamosságot, hogy kiszámítsd az egyes betűk összesített gyakoriságát a szövegek listájában.
A Tasks a Lean aszinkron kódírásának elsődleges absztrakciója. Könnyűsúlyúak, és futhatnak párhuzamosan egy másik száron, vagy egyidejűleg ugyanazon a száron.
A Taskok lehetnek tiszták vagy tisztátalanok.
A tiszta Taskokat a Task.spawn hozza létre, amely egy tiszta számítást fogad el.
A tisztátalan Taskok IO-számításokból jönnek létre, például az IO.asTask segítségével, amely egy IO α-t emel be egy Task α-ba az IO monádon belül.
Ebben a feladatban a calculateFrequencies függvény monadikus, és egy IO (Std.TreeMap Char Nat) értéket ad vissza.
Ez lehetővé teszi a tisztátalan Taskok használatát az IO.asTask segítségével, és azt is, hogy tiszta Taskokat indítsunk közbenső számításokhoz, mielőtt visszaadnánk a végső értéket.
Mivel a Lean funkcionális nyelv, a legtöbb érték perzisztens, azaz megváltoztathatatlan. A műveletek, amelyek úgy tűnik, hogy módosítanak egy értéket, valójában egy új értéket állítanak elő a kért változtatásokkal. Ez azt jelenti, hogy a memória gyakran biztonságosan megosztható a Taskok között anélkül, hogy adatversenyek alakulnának ki.
Ne feledd azonban, hogy nem minden adatszerkezet alkalmas egyformán jól a perzisztens használatra.
Például egy Array egyetlen elemének frissítése általában a teljes tömb másolását igényli.
Ugyanez vonatkozik a Std.HashSet-re és a Std.HashMap-re.
Az ilyen adatszerkezetek hatékonnyá tételéhez a Lean referenciaszámlálást alkalmaz. Amíg egy értéknek egyetlen hivatkozása van, a frissítések destruktívan is végrehajthatók, elkerülve a felesleges másolást.
Más adatszerkezetek, például a List, a Std.TreeSet és a Std.TreeMap, úgy vannak tervezve, hogy belsőleg megosszák a szerkezetüket.
A frissítések során újrahasznosítják a változatlan csomópontokat, így több érték is osztozhat az ezekre a csomópontokra mutató hivatkozásokon.
Ennek eredményeként a szerkezet egy részének módosítása általában nem igényli a teljes érték másolását.
Ez különösen alkalmassá teszi őket a Taskok közötti megosztásra.
Az egyes tesztek végrehajtási idejét nanoszekundumban méri az IO.monoNanosNow, és az eredmények mellett jeleníti meg.
Kísérletezhetsz különböző megközelítésekkel, és megnézheted, milyen hatással vannak a futásidejű teljesítményre.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Lean nyelvet 100 feladat segítségével, valódi emberi mentorálással, mindez ingyen.
A konkurencia és a párhuzamosság közötti különbségeket járjuk körbe, olyan nyelvek eltérő megközelítéseit szemügyre véve, mint a JavaScript, a Go, az Elixir és a Rust.