Multithreading in .NET

Veröffentlicht: 07. Jul 2004 | Aktualisiert: 17. Nov 2005

Von Jürgen Mauerer

Durch Multithreading kann eine Anwendung an mehreren Aufgaben gleichzeitig arbeiten. Doch das Programmieren mit parallel laufenden Threads ist relativ kompliziert. Abhilfe schafft das .NET-Framework. Es bietet eine Reihe von Klassen, die den Einsatz von Multithreading vereinfachen.

Parallel ablaufende Programme sind unter Windows mittlerweile selbstverständlich, parallel ablaufende Vorgänge innerhalb eines Programms (noch) nicht. Multithreading ist möglich, da moderne Betriebssysteme die CPU-Zeit nicht nur zwischen den laufenden Applikationen aufteilen, sondern auch innerhalb eines Programms zwischen mehreren Codeteilen. Diese so genannten Threads greifen dann auf den gemeinsamen Speicherbereich der gesamten Applikation zu.

Die Programmierung nebenläufiger Prozesse ist um einiges schwieriger als die Entwicklung synchroner Anwendungen, bei denen die Arbeitsschritte sequenziell ausgeführt werden. Das heißt: Ein neuer Schritt kann erst dann beginnen, wenn der vorherige Schritt vollständig abgeschlossen wurde. Dauert dies länger als erwartet, zeigt die Anwendung möglicherweise keine Reaktion mehr oder es erscheint die allseits unbeliebte Windows-Sanduhr. Mit Multithreading können mehrere Codeteile quasi-gleichzeitig ausgeführt werden. Ein Textverarbeitungsprogramm kann beispielsweise eine Rechtschreibprüfung als separate Aufgabe durchführen, während Sie weiterhin Änderungen am Dokument vornehmen können.

Auf Mehrprozessor-Systemen laufen die Codeteile tatsächlich gleichzeitig. Auf normalen Einprozessor-Systemen sorgt der so genannte Scheduler dafür, dass alle vorhandenen Threads eine Zeitscheibe erhalten. Hier wird der Code in Wirklichkeit nacheinander in sehr kurzen Wechseln ausgeführt.

Multithread-Anwendungen sind effizienter, da mehrere Aufgaben "mehr oder weniger" gleichzeitig ausgeführt werden. Doch Vorsicht: Jeder zusätzliche Thread beansprucht zusätzlichen Arbeitsspeicher und Prozessorzeit für die Verwaltung. Wenn Entwickler also zu viele Threads erstellen, verringern sie dadurch eventuell die Leistung der Anwendung.

Bevor das .NET Framework zur Verfügung stand, war das Schreiben von Multithread-Anwendungen recht schwierig und im Microsoft-Umfeld nur mit C/C++ möglich. Andere Sprachen, wie z.B. VisualBasic 6 waren nicht in der Lage, mehrere Threads zu starten. Das .NET Framework hingegen bietet im Namensraum System.Threading eine Reihe von leistungsfähigen Klassen an, die das Entwickeln von Anwendungen, welche Vorgänge parallel verarbeiten sollen, stark vereinfacht.

pfeilrechts.gif Multithreading - allgemeine Einführung
pfeilrechts.gif Multithreading in der Praxis