Paralelní vývoj v .NET frameworku a Visual Studiu

Příští verze .NET frameworku bude obsahovat knihovny pro vývoj paralelních aplikací a Visual Studio nástroje pro jejich ladění. Vaše aplikace tak budou moci využít více procesorů či jader. To je jistě pozivitní, ale předčasný optimismus není na místě. Paralelizace vyžaduje jisté úsilí a vaše aplikace se paralelizací zrychlí pouze za splnění řady podmínek:

  1. Provádí spíše málo dlouhotrvajících operací. Ideální jsou např. výpočty. Opačným příkladem je např. webová prezentace - zde IIS rozděluje krátce trvající zpracování stránek mezi jednotlivá jádra a žádná parelizace není třeba.
  2. Úzkým hrdlem aplikace je procesor. Pokud tráví většinu času čekáním na zápis na disk anebo na data ze sítě, paralelizace nepomůže.
  3. Aplikace je paralelizovatelná - pokud např. operace 2 vyžaduje výsledek operace 1, a operace 3 vyžaduje výsledek operace 2, nelze operace 1, 2 a 3 vůbec paralelizovat.
  4. Paralelizovaná operace jsou dostatečně dlouhé. Vytvoření a zpětná synchronizace každé úlohy má nezanedbatelnou režii, tato by neměla přesahovat režii výpočtu. Např. pokud byste chtěli paralelizovat násobení matic, je lepší paralelizovat výsledky jednotlivých řádků než jednotlivých buněk. Neboli pokud mám pouze jednotky jader, stačí vytvořit desítky úloh a tyto paralelizovat. Vytvářet milióny paralelních úloh by jenom zvyšovalo režii.

Pokud se vám povede operaci paralelizovat, může být výsledné zrychlení velmi blízké počtu jader, např. na 4 jádrech můžete dostat 3.8x vyšší výkon než na jednom. Ale paralelizace má též svoje úskalí a vyžaduje změny některých myšlenkových postupů. Namátkou:

  1. Úlohy nemusí skončit v pořadí, v jakém byly spuštěny, přestože každá úloha by teoreticky měla trvat stejně dlouho
  2. Může vzniknout několik vyjímek zároveň
  3. Musíte dávat pozor při ukládání výsledků, k příslušné datové struktuře může přistupovat více vláken současně (zde pomohou speciální třídy ze jmenného prostoru System.Collections.Concurrent

Pokud se již nemůžete dočkat, až si to sami vyzkoušíte, je to relativně snadné.

Zde jsou dvě krátká ilustrační videa v češtině:
https://www.mstv.cz/vyvojari/videos/243/Paralelni-provadeni-v--NET-frameworku-4
https://www.mstv.cz/vyvojari/videos/244/Paralelizace-a-nastroje-pro-ladeni-aplikaci

Zde je přehledný článek v MSDN magazínu: 
https://msdn.microsoft.com/en-us/magazine/cc817396.aspx

A zde web, odkud si můžete stáhnout Beta verzi .NET frameworku 4.0 a Visual Studia 2010:
https://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx

Michael