Teilen über


Threads und 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.

Prozesse und Threads

Ein Prozess ist ein ausführendes Programm. Ein Betriebssystem verwendet Prozesse, um Anwendungen voneinander zu trennen, die ausgeführt werden. Ein Thread ist die grundlegende Einheit, in der ein Betriebssystem die Prozessorzeit belegt. 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. 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. Im Kontext eines Prozesses können mehrere Threads ausgeführt werden. Alle Threads eines Prozesses teilen sich dessen virtuellen Adressraum. Ein Thread kann einen beliebigen Teil des Programmcodes ausführen, einschließlich der Teile, die aktuell von einem anderen Thread ausgeführt werden.

Hinweis

Mit dem .NET Framework können Anwendungen innerhalb eines Prozesses mithilfe von Anwendungsdomänen isoliert werden. (Anwendungsdomänen sind auf .NET Core nicht verfügbar.) Weitere Informationen finden Sie im Abschnitt Anwendungsdomänen und Threads im Artikel Anwendungsdomänen.

Normalerweise wird ein .NET-Programm mit einem einzelnen Thread gestartet, der oft als primärer Thread bezeichnet wird. Es kann jedoch zusätzliche Threads erstellen, um Code parallel oder gleichzeitig mit dem primären Thread auszuführen. Diese Threads werden auch als Arbeitsthreads bezeichnet.

Verwendung mehrerer 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.

Ziehen Sie eine Desktopanwendung in Betracht, in der der primäre Thread für Benutzeroberflächenelemente verantwortlich ist und auf Benutzeraktionen reagiert. 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. Sie können auch einen dedizierten Thread verwenden, damit die Netzwerk- oder Gerätekommunikation auf eingehende Nachrichten oder Ereignisse besser reagiert.

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. Auf solch einem System kann die Verwendung von Multithreading den Durchsatz erhöhen und gleichzeitig kann die Reaktionsfähigkeit verbessert werden.

Verwenden des Multithreadings in .NET

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

TPL und PLINQ basieren jeweils auf den ThreadPool-Threads. Die System.Threading.ThreadPool-Klasse stellt einer .NET-Anwendung einen Pool von Arbeitsthreads bereit. Sie können auch Threadpoolthreads verwenden. Weitere Informationen finden Sie unter Der verwaltete Threadpool.

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

Mehrere Threads müssen möglicherweise auf eine freigegebene Ressource zugreifen. Damit die Ressource nicht beschädigt wird und um Racebedingungen zu vermeiden, müssen Sie den Threadzugriff darauf synchronisieren. Sie sollten ebenso die Interaktion mehrerer Threads koordinieren. .NET bietet eine Reihe von Typen, mit denen Sie den Zugriff auf eine freigegebene Ressource synchronisieren oder die Threadinteraktion koordinieren können. Weitere Informationen finden Sie unter Übersicht über Synchronisierungsprimitiven.

Behandeln Sie Ausnahmen in Threads. Nicht behandelte Ausnahmen in Threads beenden in der Regel den Prozess. Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads.

Siehe auch