Multithreading in der Praxis

Teil 2: Programmieren für den Multi-Core-Prozessor

Modularisierung in der Programmentwicklung

Ein Programm oder eine Applikation, wie etwa eine Textverarbeitung, das Betriebssystem oder ein Mailsystem bestehen aus tausenden verwobener Codestücke. Diese bezeichnet man je nach Programmiersprache als Routine, Prozedur, Funktion, Objekt, Methode oder Komponente.

All diese Begriffe beziehen sich dabei auf den Software-Entwicklungsprozess. Zusammengefasst werden diese Codestücke in den Bibliotheken, wie etwa dem .Net-Framework oder den Java-Funktionssammlungen. Die Zusammenfassung von Funktionen in Bibliotheken soll die Entwicklung von Applikationen durch Wiederverwendung beschleunigen.

Auch die Betriebssysteme, wie etwa Windows oder Linux, stellen prinzipiell nur eine Sammlung an Standardfunktionen dar. Der Unterschied zu den Funktionsbibliotheken liegt letztendlich darin, dass die Betriebssysteme eben allgemein gängige Funktionen in einem Basissystem zusammenfassen, dem Betriebssystem.

Die oben erwähnten Funktionssammlungen allerdings orientieren sich näher an den Geschäftsapplikationen und sollen deren Erstellung vereinfachen. Aus den Übersetzern der Programmiersprachen (Compiler, Linker oder Runtime-Umgebung) werden dann die ausführbaren Software-Module, beispielsweise eine EXE-Datei, ein Web-Service oder eine .Net-Assembly.

Die Zerlegung eines Programms in viele Module bietet für die Software-Erstellung eine Reihe von Vorteilen. Die Entwicklung von Modulen kann parallel erfolgen, die Wiederverwendbarkeit (der Code-Re-Use) steigt. Bereits geprüfte Funktionen müssen nicht neu erstellt und getestet werden. Dies alles aber sind Anforderungen der Software-Entwicklung und haben mit jenen, wie sie zur späteren Laufzeit in einem Multi-Core-System benötigt werden, wenig gemeinsam.