30.04.2019, Vladimír Klaus, navštíveno 2990x
V této úžasné a moc pěkně napsané knize autor popisuje řadu technik pro zrychlení aplikací. Začíná sice trochu nudně komplexitou algoritmů, ale pak přejde na profilery, i přepínače kompilátoru, a zmíní i to, že často stačí program jen chytřeji přepsat.
Pak se probírá jednotlivými datovými typy a jejich systémem ukládání v paměti, resp. alokováním paměti. Hodně zajímavé je (ne)kopírování dat při přiřazování jedné proměnné do druhé. A stranou nezůstane ani to, jak se data předávají funkcím a metodám.
Memory Management aneb FastMM a spol. je další velmi zajímavé, ale poněkud náročné čtení. I když nic takového zřejmě nikdy nebudu potřebovat, je zajímavé se ponořit i do složitějších částí, jako je přidělování paměti, optimalizace přidělování psaním chytřejšího kódu nebo dokonce náhradou FastMM za jiné systémy pro přidělování paměti.
A pak přijde to hlavní – paralelní svět! Hodně zajímavá je část popisující rizika paralelního zápisu a čtení jedné proměnné ze dvou různých vláken. Závislost na procesoru, výrobci, typu dat atd. je opravdu neuvěřitelná a opravdu může dávat totálně nesmyslné výsledky. A dozvíte se i to, jak s tím může pomoci tzv. synchronizace, tedy princip podobný databázovým transakcím, v reálném světě pak podobný zamykání se na WC. ;-)
Hlavním problémem u paralelního programování je synchronizace "pracovních" vláken s hlavním vláknem – tedy předání výsledku, aby mohl být třeba zobrazen. Existuje řada postupů, od posílání messages, přes používání Synchronize nebo Queue nebo dokonce čekání a vyzvedávání údajů ze speciální fronty. A pak tu jsou také knihovny, které některé části ještě zjednodušují – jako třeba OmniThreadLibrary (napsal autor této knihy).
V jedné kapitole se jde i k základům, tedy TThread, což je poněkud předpotopní a těžkopádné, ale základy je dobré pochopit i tak. Nejzajímavější je pak kapitola 7, kde se již probírají opravdu pořádné věci, jako je TTask, Async/Await, Join, Future, Parallel For apod.
V knize najdete i kapitolu popisující externí knihovny. To už sice nesouvisí s paralelním programováním, ale kniha není jen o paralelním programování, ale obecně o metodách, které nám pomohou zvýšit výkon aplikace. A protože často v Delphi nemusí být ideální implementace nějakých funkcí (třeba matematických), pak je vhodné sáhnout k externím knihovnám.
Parádní je i poslední kapitola "Best Practices" shrnující vše důležité, co bylo v knize probráno. A že toho bylo hodně! Ostatně kniha se nedá číst jako učebnice, ale spíš je vhodné ji "rychle" projít a poznamenat si pasáže, které budou vhodné pro váš projekt a k těm se pak vrátit. A ke knize jsou i ukázkové zdrojáky, které se v ní popisují!