Threads und ThreadingThreads and threading

Mit Multithreading können Sie die Reaktionsfähigkeit Ihrer Anwendung und deren Durchsatz erhöhen, falls Ihre Anwendung in einem Multiprozessor- oder Multicoresystem ausgeführt wird.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.

Prozesse und ThreadsProcesses and threads

Ein Prozess ist ein ausführendes Programm.A process is an executing program. Ein Betriebssystem verwendet Prozesse, um Anwendungen voneinander zu trennen, die ausgeführt werden.An operating system uses processes to separate the applications that are being executed. Ein Thread ist die grundlegende Einheit, in der ein Betriebssystem die Prozessorzeit belegt.A thread is the basic unit to which an operating system allocates processor time. Jeder Thread verfügt über eine Planungspriorität und verwaltet eine Reihe von Strukturen, mit denen das System den Threadkontext speichert, bis die Threadausführung angehalten wird.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. Der Threadkontext enthält alle Informationen, die der Thread benötigt, um die Ausführung nahtlos fortzusetzen. Dies schließt auch seine CPU-Register und seinen Stapel ein.The thread context includes all the information the thread needs to seamlessly resume execution, including the thread's set of CPU registers and stack. Im Kontext eines Prozesses können mehrere Threads ausgeführt werden.Multiple threads can run in the context of a process. Alle Threads eines Prozesses teilen sich dessen virtuellen Adressraum.All threads of a process share its virtual address space. Ein Thread kann einen beliebigen Teil des Programmcodes ausführen, einschließlich der Teile, die aktuell von einem anderen Thread ausgeführt werden.A thread can execute any part of the program code, including parts currently being executed by another thread.

Hinweis

Mit dem .NET Framework können Anwendungen innerhalb eines Prozesses mithilfe von Anwendungsdomänen isoliert werden.The .NET Framework provides a way to isolate applications within a process with the use of application domains. (Anwendungsdomänen sind auf .NET Core nicht verfügbar.) Weitere Informationen finden Sie im Abschnitt Anwendungsdomänen und Threads im Artikel Anwendungsdomänen.(Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

Normalerweise wird ein .NET-Programm mit einem einzelnen Thread gestartet, der oft als primärer Thread bezeichnet wird.By default, a .NET program is started with a single thread, often called the primary thread. Es kann jedoch zusätzliche Threads erstellen, um Code parallel oder gleichzeitig mit dem primären Thread auszuführen.However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Diese Threads werden auch als Arbeitsthreads bezeichnet.These threads are often called worker threads.

Verwendung mehrerer ThreadsWhen to use multiple threads

Sie verwenden mehrere Threads, um die Reaktionsfähigkeit Ihrer Anwendung zu erhöhen und um die Vorteile eines Multiprozessor- oder Multicoresystems zu nutzen, die den Anwendungsdurchsatz erhöhen.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.

Ziehen Sie eine Desktopanwendung in Betracht, in der der primäre Thread für Benutzeroberflächenelemente verantwortlich ist und auf Benutzeraktionen reagiert.Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Verwenden Sie Arbeitsthreads, um zeitaufwendige Vorgänge durchzuführen, die andernfalls den primären Thread einnehmen würden und so dazu führen würden, dass die Benutzeroberfläche nicht mehr reagiert.Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Sie können auch einen dedizierten Thread verwenden, damit die Netzwerk- oder Gerätekommunikation auf eingehende Nachrichten oder Ereignisse besser reagiert.You also can use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

Wenn Ihr Programm Vorgänge ausführt, die parallel durchgeführt werden können, kann die Gesamtausführungszeit verringert werden, indem diese Vorgänge in separaten Threads durchgeführt und das Programm auf einem Multiprozessor- oder Multicoresystem ausgeführt wird.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. Auf solch einem System kann die Verwendung von Multithreading den Durchsatz erhöhen und gleichzeitig kann die Reaktionsfähigkeit verbessert werden.On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Verwenden des Multithreadings in .NETHow to use multithreading in .NET

Ab .NET Framework 4 wird für die Nutzung von Multithreading empfohlen, Task Parallel Library (TPL) und Parallel LINQ (PLINQ) zu verwenden.Starting with the .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Weitere Informationen finden Sie unter Parallele Programmierung in .NET.For more information, see Parallel programming.

TPL und PLINQ basieren jeweils auf den ThreadPool-Threads.Both TPL and PLINQ rely on the ThreadPool threads. Die System.Threading.ThreadPool-Klasse stellt einer .NET-Anwendung einen Pool von Arbeitsthreads bereit.The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Sie können auch Threadpoolthreads verwenden.You also can use thread pool threads. Weitere Informationen finden Sie unter Der verwaltete Threadpool.For more information, see The managed thread pool.

Zum Schluss können Sie die System.Threading.Thread-Klasse verwenden, die einen verwalteten Thread darstellt.At last, you can use the System.Threading.Thread class that represents a managed thread. Weitere Informationen finden Sie unter Verwenden von Threads und Threading.For more information, see Using threads and threading.

Mehrere Threads müssen möglicherweise auf eine freigegebene Ressource zugreifen.Multiple threads might need to access a shared resource. Damit die Ressource nicht beschädigt wird und um Racebedingungen zu vermeiden, müssen Sie den Threadzugriff darauf synchronisieren.To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Sie sollten ebenso die Interaktion mehrerer Threads koordinieren.You also might want to coordinate the interaction of multiple threads. .NET bietet eine Reihe von Typen, mit denen Sie den Zugriff auf eine freigegebene Ressource synchronisieren oder die Threadinteraktion koordinieren können..NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Weitere Informationen finden Sie unter Übersicht über Synchronisierungsprimitiven.For more information, see Overview of synchronization primitives.

Behandeln Sie Ausnahmen in Threads.Do handle exceptions in threads. Nicht behandelte Ausnahmen in Threads beenden in der Regel den Prozess.Unhandled exceptions in threads generally terminate the process. Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads.For more information, see Exceptions in managed threads.

Siehe auchSee also