Vlákna a vlákna
Multithreading umožňuje zvýšit rychlost odezvy aplikace a pokud vaše aplikace běží v multiprocesorovém nebo vícejádrovým systému, zvyšte jeho propustnost.
Procesy a vlákna
Proces je spuštěný program. Operační systém používá procesy k oddělení spuštěných aplikací. Vlákno je základní jednotka, pro kterou operační systém přiděluje čas procesoru. Každé vlákno má prioritu plánování a udržuje sadu struktur, které systém používá k uložení kontextu vlákna při pozastavení provádění vlákna. Kontext vlákna obsahuje všechny informace, které vlákno potřebuje k bezproblémovému obnovení provádění, včetně sady registrů procesoru a zásobníku vlákna. V kontextu procesu může běžet více vláken. Všechna vlákna procesu sdílejí svůj virtuální adresní prostor. Vlákno může spouštět jakoukoli část kódu programu, včetně částí, které právě provádí jiné vlákno.
Poznámka:
.NET Framework poskytuje způsob, jak izolovat aplikace v rámci procesu s využitím domén aplikací. (Domény aplikací nejsou k dispozici v .NET Core.) Další informace najdete v části Domény aplikace a vlákna článku Domény aplikace.
Ve výchozím nastavení se program .NET spouští s jedním vláknem, které se často označuje jako primární vlákno. Může však vytvořit další vlákna, která budou spouštět kód paralelně nebo souběžně s primárním vláknem. Tato vlákna se často nazývají pracovní vlákna.
Kdy použít více vláken
Pomocí více vláken zvýšíte rychlost odezvy aplikace a využijete multiprocesor nebo vícejádrový systém ke zvýšení propustnosti aplikace.
Představte si desktopovou aplikaci, ve které je primární vlákno zodpovědné za prvky uživatelského rozhraní a reaguje na akce uživatelů. Pomocí pracovních vláken můžete provádět časově náročné operace, které by jinak zabíraly primární vlákno a nezpůsobily odezvu uživatelského rozhraní. Můžete také použít vyhrazené vlákno pro komunikaci se sítí nebo zařízením, které bude reagovat na příchozí zprávy nebo události.
Pokud program provádí operace, které je možné provádět paralelně, můžete celkovou dobu provádění snížit provedením těchto operací v samostatných vláknech a spuštěním programu v multiprocesorovém nebo vícejádrovým systému. V takovém systému může použití multithreadingu zvýšit propustnost spolu se zvýšenou odezvou.
Jak používat multithreading v .NET
Počínaje rozhraním .NET Framework 4 se doporučuje používat multithreading pomocí knihovny TPL (Task Parallel Library) a Parallel LINQ (PLINQ). Další informace naleznete v tématu Paralelní programování.
TPL i PLINQ se spoléhají na ThreadPool vlákna. Třída System.Threading.ThreadPool poskytuje aplikaci .NET s fondem pracovních vláken. Můžete také použít vlákna fondu vláken. Další informace najdete v tématu Fond spravovaných vláken.
Nakonec můžete použít System.Threading.Thread třídu, která představuje spravované vlákno. Další informace naleznete v tématu Použití vláken a podprocesů.
Přístup ke sdílenému prostředku může vyžadovat více vláken. Chcete-li zachovat prostředek v nepřerušujícím stavu a vyhnout se podmínkám časování, musíte k němu synchronizovat přístup z vlákna. Můžete také chtít koordinovat interakci s více vlákny. .NET poskytuje řadu typů, které můžete použít k synchronizaci přístupu ke sdílenému prostředku nebo koordinaci interakce vlákna. Další informace naleznete v tématu Přehled primitiv synchronizace.
Zpracování výjimek ve vláknech Neošetřené výjimky ve vláknech obvykle ukončují proces. Další informace najdete v tématu Výjimky ve spravovaných vláknech.