Vlákna a dělení na vláknaThreads and threading

Multithreading umožňuje zvýšit rychlost odezvy vaší aplikace, a pokud vaše aplikace běží na víceprocesorovém nebo multi-core systému, zvyšte její propustnost.Multithreading allows you to increase the responsiveness of your application and, if your application runs on a multiprocessor or multi-core system, increase its throughput.

Procesy a vláknaProcesses and threads

Proces je spuštěný program.A process is an executing program. Operační systém používá procesy k oddělení spuštěných aplikací.An operating system uses processes to separate the applications that are being executed. Vlákno je základní jednotka, do které operační systém přiděluje čas procesoru.A thread is the basic unit to which an operating system allocates processor time. Každé vlákno má prioritu plánování a udržuje sadu struktur, kterou systém používá k uložení kontextu vlákna, když je spuštění vlákna pozastaveno.Each thread has a scheduling priority and maintains a set of structures the system uses to save the thread context when the thread's execution is paused. Kontext vlákna zahrnuje všechny informace, které vlákno potřebuje k bezproblémovému pokračování v provádění, včetně sady vláken a zásobníků procesoru.The thread context includes all the information the thread needs to seamlessly resume execution, including the thread's set of CPU registers and stack. V kontextu procesu lze spustit více vláken.Multiple threads can run in the context of a process. Všechna vlákna v procesu sdílejí svůj virtuální adresní prostor.All threads of a process share its virtual address space. Vlákno může spouštět libovolnou část kódu programu, včetně částí, které jsou aktuálně spouštěny jiným vláknem.A thread can execute any part of the program code, including parts currently being executed by another thread.

Poznámka

.NET Framework poskytuje způsob, jak izolovat aplikace v rámci procesu s použitím domén aplikací.The .NET Framework provides a way to isolate applications within a process with the use of application domains. (Domény aplikací nejsou k dispozici v rozhraní .NET Core.) Další informace naleznete v části domény aplikace a vlákna v článku domény aplikace .(Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

Ve výchozím nastavení je program .NET spuštěn s jedním vláknem, často se nazývá primární vlákno.By default, a .NET program is started with a single thread, often called the primary thread. Může však vytvořit další vlákna pro souběžné a souběžné spouštění kódu s primárním vláknem.However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Tato vlákna se často nazývají pracovní vlákna.These threads are often called worker threads.

Kdy použít více vlákenWhen to use multiple threads

Můžete použít více vláken ke zvýšení rychlosti odezvy vaší aplikace a využít více procesorů nebo vícejádrových systémů ke zvýšení propustnosti aplikace.You use multiple threads to increase the responsiveness of your application and to take advantage of a multiprocessor or multi-core system to increase the application's throughput.

Vezměte v úvahu desktopovou aplikaci, ve které je primární vlákno zodpovědné za prvky uživatelského rozhraní a reaguje na akce uživatele.Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Použijte pracovní vlákna k provádění časově náročných operací, které by jinak mohly zabírat primární vlákno a předávat uživatelské rozhraní bez odezvy.Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Můžete také použít vyhrazené vlákno pro komunikaci sítě nebo zařízení, aby bylo možné lépe reagovat na příchozí zprávy nebo události.You also can use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

Pokud program provádí operace, které lze provést paralelně, může být celková doba spuštění snížena provedením těchto operací v samostatných vláknech a spuštění programu na víceprocesorovém nebo multi-core systému.If your program performs operations that can be done in parallel, the total execution time can be decreased by performing those operations in separate threads and running the program on a multiprocessor or multi-core system. V takovém systému může použití multithreadingu zvýšit propustnost spolu se zvýšenou odezvou.On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Jak používat multithreading v .NETHow to use multithreading in .NET

Počínaje .NET Framework 4 je doporučený způsob, jak využít multithreading, je použít Task Parallel Library (TPL) a Paralelní LINQ (PLINQ).Starting with the .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Další informace najdete v tématu paralelní programování.For more information, see Parallel programming.

TPL i PLINQ spoléhají na ThreadPool vlákny.Both TPL and PLINQ rely on the ThreadPool threads. Třída System.Threading.ThreadPool poskytuje aplikaci .NET s fondem pracovních vláken.The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Můžete také použít vlákna fondu vláken.You also can use thread pool threads. Další informace najdete v tématu spravovaný fond vláken.For more information, see The managed thread pool.

V posledních, můžete použít třídu System.Threading.Thread, která představuje spravované vlákno.At last, you can use the System.Threading.Thread class that represents a managed thread. Další informace najdete v tématu použití vláken a vláken.For more information, see Using threads and threading.

Přístup ke sdílenému prostředku může vyžadovat více vláken.Multiple threads might need to access a shared resource. Aby byl prostředek v nepoškozeném stavu a nedocházelo ke konfliktům časování, musíte k němu synchronizovat přístup k vláknu.To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Také může být vhodné koordinovat interakci více vláken.You also might want to coordinate the interaction of multiple threads. Rozhraní .NET poskytuje rozsah typů, které můžete použít k synchronizaci přístupu ke sdílenému prostředku nebo k interakci s vlákny pro koordinaci..NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Další informace najdete v tématu Přehled primitiv synchronizace.For more information, see Overview of synchronization primitives.

Zpracovává výjimky v vláknech.Do handle exceptions in threads. Neošetřené výjimky v vláknech obvykle ukončí proces.Unhandled exceptions in threads generally terminate the process. Další informace naleznete v tématu výjimky ve spravovaných vláknech.For more information, see Exceptions in managed threads.

Viz také:See also