Visual Studio – paralelné a asychrónne programovanie v .NET

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