Cieľ kurzu: Kurz je určený pre programátorov, ktorí chcú naplno využiť silu dnešných viacjadrových procesorov, prípadne potrebujú spracovávať úlohy paralelne. Tiež je určený programátorom, ktorí musia v aplikáciách implementovať procesy na pozadí, či už za účelom neblokovania aplikácií pre užívateľov počas vykonávania dlhotrvajúcich úloh (tlač reportov, dotazy na databázy, sťahovanie súborov, …), alebo z rôznych iných dôvodov. Účastníci sa naučia klasické metódy paralelného a asychrónneho spracovania, ako aj najnovšie technológie tohto spracovania v .NET 4.5. Kurz sa venuje aj ošetreniu praktických problémov vznikajúcich pri takomto spracovaní, ako napr. výmena dát medzi vláknami, súťaženie o zdroje počítača či synchronizácia vlákien. Pozornosť je venovaná aj korektnému návrhu aplikácie, a správnemu prevodu sekvenčných algoritmov na paralelné.
Trvanie: 2 dni
Vstupné požiadavky: Ovládať programovanie v C# alebo VB.NET aspoň na úrovni mierne pokročilý.
Obsahová náplň:
Úvod do paralelizmu
- Prečo spracovávať paralelne?
- Tradičné metódy vs. moderné metódy
- Patterny paralelného spracovania
- Problémy s paralelným spracovaním
- Kedy sa oplatí paralelizovať a kedy nie
Asynchrónne spracovanie
- Asynchrónny model .NET
- Delegáti a interfacy
- Uskutočnenie asynchrónneho volania
- Zozbieranie výsledkov po ukončení asynchrónneho volania
- Konverzia kódu na asynchrónny
- Na čo si dať pozor pri asynchrónnom spracovaní
- Operátory await, async a ďalšie asynchrónne novinky v .NET 4.5
Začíname s paralelizmom
- Threading model .NET
- Klasické spracovanie triedou Thread
- Jednoduchý paralelizmus cez triedu BackgroundWorker
- Dátové štruktúry určené pre paralelné programovanie
- Konverzia sekvenčného kódu na paralelný
- Vytvorenie paralelnej aplikácie hneď na začiatku
Task Parallel Library – TPL
- Paralelný cyklus for a foreach
- Trieda Task
- Zreťazovanie paralelných úloh a sekvencie úloh
- Hierarchia paralelných úloh typu parent-child
- Čakanie na ukončenie úloh
- Spracovanie výnimiek v úlohách
- Predčasné ukončovanie úloh
- Plánovač úloh a trieda ThreadPool
- Vracanie hodnôt do hlavného vlákna po ukončení úlohy
Synchronizácia paralelných úloh
- Locking
- Spin-waiting
- Trieda Interlocked – operácie bez uzamykania
- Triedy Monitor, Mutex a Semaphore
Štruktúry pre paralelné programovanie
- Kolekcie pre konkurenčné spracovanie
- Primitívne synchronizačné typy
- Triedy pre Lazy inicializáciu
- Agregované výnimky
Pokročilé technológie paralelizmu v .NET
- Parallel LINQ – PLINQ
- Statická trieda Parallel
- Paralelné lambda expressions
- Task Factories
- Vlastné plánovače úloh
- Vlastné rozdeľovače úloh
Debugging a správnosť vykonávania
- Prehľad špeciálnych bugov (deadlocky, data races)
- Debugovanie a paralelnej aplikácie
- Korekcia data races
- Concurrency Visualizer
- Všeobecné usmernenia k paralelnému spracovaniu