|
|
Multiprocessing contra Multithreading
UNIX hat ein durchaus schlankes und effizientes Prozesskonzept, das auf dem Aufruf von fork() basiert. Das Teilen der Prozesse mit allen Ressourcen ermöglicht es leicht, Aufgaben auf mehrere Prozesse zu verteilen. Davon machen die meisten Dämonen auch reichlich Gebrauch. Durch die Aufteilung in zwei Prozesse können sich parallele Jobs nicht so leicht gegenseitig durcheinander bringen. Dieses Konzept ist ideal für parallel laufende Serverprozesse. Im Gegensatz zu einem Prozess arbeitet ein Thread nicht mit einem eigenen Speicherbereich, sondern teilt sich mit dem Vaterprozess alle Ressourcen. Normalerweise besteht ein Thread aus einer Funktion, die parallel zum Rest des Programms gestartet wird. Threads haben ihr Haupteinsatzgebiet im Bereich der grafischen Oberflächen. Hier ist es erforderlich, dass die grafische Darstellung betreut wird, insbesondere das Verarbeiten der Nachrichten, die über Bildneuaufbau, Mauspositionen und ähnliches berichten. Dies muss auch dann präsent sein, wenn das Programm gerade seiner eigentlichen Aufgabenstellung nachgeht und dabei vielleicht langwierige Berechnungen durchführt. Dazu ist ein Thread ideal, da er schnell ohne großen Aufwand programmiert werden kann. Da die Aufgaben der Threads fast keine Berührungspunkte miteinander haben, muss man sie auch nicht gegeneinander absichern.
Beide Konzepte haben also völlig unterschiedliche Umgebungen, in denen sie
arbeiten. Die in Diskussionen manchmal anzutreffende Aussage, dass Threads so
unglaublich viel performanter seien, ist also Augenwischerei. Wer einen Server
durch Threads parallelisiert, wird zumindest unter UNIX soviel
Verwaltungsarbeit durch die Synchronisation der Threads als Überhang bekommen,
dass sich der Aufwand oft nicht lohnt.
In der Konsequenz bedeutet Threading, dass jede globale Variable, jeder Dateizeiger
oder sonstige Ressource, die gemeinsam genutzt wird, vor dem gegenseitigen
Verändern zu schützen ist. Lediglich auf Systemen mit einem anderen
Prozesskonzept, die statt dem
Das Konzept mit
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|