11 Multithreading und die Task Parallel Library (TPL)
Es gibt viele Operationen, die eine längere Zeit für die Ausführung benötigen. Ohne besondere Maßnahme wird die weitere Ausführung einer Anwendung in einem solchen Fall solange blockiert, bis die langdauernde Operation beendet ist. Abhilfe schafft das Multithreading oder seit .NET 4.0 die Nutzung der zur Verfügung stehenden Prozessorkerne mit der TPL (Task Parallel Library). Beide Themen stehen im Mittelpunkt dieses Kapitels.
11.1 Überblick 

Seit den Anfängen von .NET lassen sich mit mehr oder weniger viel Aufwand multithreading-fähige Anwendungen programmieren. Die Grundlage war die Klasse Thread aus dem Namespace System.Threading. Mit Thread ließen sich bei Bedarf neue Threads ins Leben rufen, Threadprioritäten setzen und auch komplexe Synchronisationsmechanismen realisieren.
Aber die Entwicklung der Hardware begann aus technischen Gründen einen Weg einzuschlagen, dem die Klasse Thread nicht mehr gewachsen war: Multi-Core-Prozessoren überfordern diese Klasse. Während in all den Jahren zuvor die Taktfrequenz immer weiter nach oben getrieben worden war, sahen sich die Hardware-Entwicklungsfirmen bei einer Taktfrequenz von ca. 3 GHz einer natürlichen Grenze gegenüber: Prozessoren mit noch höherer Taktfrequenz ließen sich nicht mehr ausreichend kühlen. Um dennoch leistungsverbesserte Prozessoren anbieten zu können, wurden die Multi-Core-Prozessoren entwickelt. Zuerst waren es Double-Core-Prozessoren, schnell folgte die nächste Welle mit Quad-Core-Prozessoren. Ein Ende der Entwicklung ist derzeit nicht abzusehen.
Mit der Klasse Thread Anwendungen zu entwickeln, die die Möglichkeiten der Multi-Core-Prozessoren ausreizen, ist nur schwer möglich, denn die Klasse Thread wurde zu einer Zeit entwickelt, als es darum ging, mehrere Ausführungsstränge quasi-gleichzeitig auf einer CPU laufen zu lassen.
Dem hardwaretechnischem Fortschritt wird in .NET nunmehr mit der Einführung der TPL (Task Parallel Library) Rechnung getragen. TPL ist eine neue API, die uns in die Lage versetzt, Mehrkernprozessoren in unseren Anwendungen zu nutzen, ohne dass dabei die Komplexität des Programmcodes zunimmt. Ganz im Gegenteil, es ist sogar einfacher, die neue TPL zu programmieren als die »alte« Klasse Thread. Nichtsdestotrotz kommen Ihnen die Kenntnisse der klassischen Multithreading-Programmierung beim Einsatz von TPL zugute. Nicht nur aus diesem Grund habe ich in diesem Buch auf die grundlegende Programmierung mehrerer Threads nicht verzichtet.