Kurzusok
/
Lean
Lean
/
Feladatok
/
Párhuzamos betűgyakoriság
Párhuzamos betűgyakoriság

Párhuzamos betűgyakoriság

Közepes

Utasítások

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.

Aszinkron Taskok

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.

Az adatversenyek megelőzése

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.

A végrehajtási sebesség mérése

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.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Lean Exercism

Készen állsz elkezdeni a(z) Párhuzamos betűgyakoriság feladatot?

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.

Mélyelemzés: Párhuzamos betűgyakoriság!

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.