Freigeben über


Threads und Threading

Multithreading ermöglicht es Ihnen, die Reaktionsfähigkeit Ihrer Anwendung zu erhöhen und, wenn Ihre Anwendung auf einem Multiprozessor- oder Multikernsystem ausgeführt wird, den Durchsatz zu erhöhen.

Prozesse und Threads

Ein Prozess ist ein Ausführungsprogramm. Ein Betriebssystem verwendet Prozesse, um die ausgeführten Anwendungen zu trennen. Ein Thread ist die Basiseinheit, der ein Betriebssystem Prozessorzeit zuweist. Jeder Thread hat eine Planungspriorität und verwaltet eine Reihe von Strukturen, die das System verwendet, um den Threadkontext zu speichern, wenn die Ausführung des Threads angehalten wird. Der Threadkontext enthält alle Informationen, die der Thread benötigt, um die Ausführung nahtlos fortzusetzen, einschließlich der Cpu-Register und des Stapels des Threads. Mehrere Threads können im Kontext eines Prozesses ausgeführt werden. Alle Threads eines Prozesses teilen seinen virtuellen Adressraum. Ein Thread kann einen beliebigen Teil des Programmcodes ausführen, einschließlich der Teile, die derzeit von einem anderen Thread ausgeführt werden.

Hinweis

.NET Framework bietet eine Möglichkeit, Anwendungen innerhalb eines Prozesses mit der Verwendung von Anwendungsdomänen zu isolieren. (Anwendungsdomänen sind in .NET Core nicht verfügbar.) Weitere Informationen finden Sie im Abschnitt "Anwendungsdomänen und Threads " des Artikels "Anwendungsdomänen ".

Standardmäßig wird ein .NET-Programm mit einem einzelnen Thread gestartet, der häufig als primärer Thread bezeichnet wird. Sie kann jedoch zusätzliche Threads erstellen, um Code parallel oder gleichzeitig mit dem primären Thread auszuführen. Diese Threads werden häufig als Arbeitsthreads bezeichnet.

Wann mehrere Threads verwendet werden sollen

Sie verwenden mehrere Threads, um die Reaktionsfähigkeit Ihrer Anwendung zu erhöhen und einen Multiprozessor oder ein Multikernsystem zu nutzen, um den Durchsatz der Anwendung zu erhöhen.

Erwägen Sie eine Desktopanwendung, in der der primäre Thread für Benutzeroberflächenelemente verantwortlich ist und auf Benutzeraktionen reagiert. Verwenden Sie Arbeitsthreads, um zeitaufwendige Vorgänge auszuführen, die andernfalls den primären Thread belegen und die Benutzeroberfläche nicht reaktionsfähig machen. Sie können auch einen dedizierten Thread für die Netzwerk- oder Gerätekommunikation verwenden, um reaktionsfähiger für eingehende Nachrichten oder Ereignisse zu sein.

Wenn Ihr Programm Vorgänge ausführt, die parallel ausgeführt werden können, kann die Gesamtausführungszeit verringert werden, indem diese Vorgänge in separaten Threads ausgeführt und das Programm auf einem Multiprozessor- oder Multi-Core-System ausgeführt wird. Bei einem solchen System kann die Verwendung von Multithreading den Durchsatz zusammen mit der erhöhten Reaktionsfähigkeit erhöhen.

Anleitung zur Verwendung von Multithreading in .NET

Ab .NET Framework 4 wird empfohlen, für Multithreading die Task Parallel Library (TPL) und Parallel LINQ (PLINQ) zu verwenden. Weitere Informationen finden Sie unter parallele Programmierung.

Sowohl TPL als auch PLINQ basieren auf den ThreadPool Threads. Die System.Threading.ThreadPool Klasse stellt eine .NET-Anwendung mit einem Pool von Arbeitsthreads bereit. Sie können auch Threadpoolthreads verwenden. Weitere Informationen finden Sie im verwalteten Threadpool.

Endlich können Sie die System.Threading.Thread Klasse verwenden, die einen verwalteten Thread darstellt. Weitere Informationen finden Sie unter Verwenden von Threads und Threading.

Möglicherweise müssen mehrere Threads auf eine freigegebene Ressource zugreifen. Um die Ressource in einem unbeschädigten Zustand zu halten und Wettlaufbedingungen zu vermeiden, müssen Sie den Thread-Zugriff darauf synchronisieren. Möglicherweise möchten Sie auch die Interaktion mehrerer Threads koordinieren. .NET stellt eine Reihe von Typen bereit, mit denen Sie den Zugriff auf eine freigegebene Ressource oder eine Koordinatenthreadinteraktion synchronisieren können. Weitere Informationen finden Sie unter Übersicht über Synchronisierungsgrundtypen.

Behandeln Sie Ausnahmen in Threads. Unbehandelte Ausnahmen in Threads beenden den Prozess im Allgemeinen. Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads.

Siehe auch