techlogs Mehr als Bits und Bytes

Von Gartenarbeit und Multithreading

von Rainer Gerhards, 10. Februar 2009, 15:14

Was in aller Welt habt denn nun Gartenarbeit mit Multithreading zu tun? Was ist denn überhaupt Multithreading? Und warum sollte mich das auch noch interessieren...?

Gemach, gemach, die Erklärung folgt auf dem Fusse. In einem IT-Blog hat man es gelegentlich mit Begriffen und Konzepten zu tun, die nicht immer und für Jedermann sofort verständlich sind. Ohne diese Konzepte ist es aber schwer, "vernünftige" Postings zu schreiben. Nun könnte ich natürlich "einfach loslegen" und zur Erklärung auf Fachquellen oder auch z.B. Wikipedia verweisen.

Ich möchte aber einen - hoffentlich - spassigeren Weg beschreiten, und einige wichtige Dinge mit Analogien aus dem Alltagsleben erklären. Heute möchte ich den Auftakt mit "Multithreading" machen, einem Thema, dessen Auswirkungen sich sicherlich noch durch viele Postings ziehen wird. Und das hat nun einmal viel mit Gemüsegärtnerei zu tun. Aber lesen sie selbst:

Früher haben Programme immer einen Schritt nach dem Anderen ausgeführt und ihre Verarbeitung immer erst dann fortgesetzt, wenn der vorherige Schritt beendet wurde. Eine Analogie aus "dem richtigen Leben" finden wir tatsächlich bei der Gartenarbeit: Nehmen wir einmal an, sie müssen im Sommer den Gemüsegarten giessen. Und nehmen wir weiter an, sie verfügen leider über keinen Schlauch, müssen also Gießkannen nutzen. Dann müssen sie immer wieder Wasser holen, gießen, und, wenn die Kanne leer ist (und erst dann!), neues Wasser holen. Das wiederholen sie so lange, bis das Gemüsebeet hinreichend gegossen ist.

Wie jeder Hobbygärtner weiss, ist das eine mühsamme und langwierige Prozedur. Wie also kann man sie abkürzen? Richtig! Man spannt die ganze Familie mit ein! Und wenn dann, sagen wir, vier Paar Hände giessen, dann ist man doch viel schneller fertig. In einem Viertel der Zeit schafft man es wohl meistens nicht, denn a) muss man gelegentlich schwatzen und b) kommt man sich an Wasserhahn oder im Gemüsebeet in die Quere und muss warten (ganz zu schweigen von dem Fall, dass nur drei Gießkannen vorhanden sind...).

Nun sind Softwareentwickler auch gelegentlich Hobby-Gärtner. Und so ist man irgendwann auf die Idee gekommen, ein ähnliches Verfahren auch bei der Programmierung zu verwenden. Das Ergebnis nennt sich heute "Multithreading" und bedeutet, kurz gesagt, dass ein Programm gleichzeitig verschiedene Dinge ausführt - ganz so, wie die vier Familienmitglieder ja auch gleichzeitig den Garten giessen (jedes Familienmitglied entspricht einem Thread).

Und, wie "im richtigen Leben", wird auch in einem Programm nicht die vierfache Geschwindigkeit erreicht, wenn mehrere Threads gleichzeitig ausgeführt werden. Da gibt es zum Einen einen gewissen Verwaltungsoverhead, der IT-Variante des Schwätzchens. Zum Anderen muss der Zugriff auf gemeinsamme Resourcen "synchronisiert" werden. Resourcen sind hierbei Dinge, die nun einmal nicht parallel genutzt werden können. Im Beispiel entsprächen sie dem Wasserhahn oder auch dem Blumenbeet. Haben sie schon einmal versucht, drei Gießkannen (wirklich) gleichzeitig an einem Wasserhahn zu füllen? Das macht nur mit kleineren Kindern richtig Spaß, bringt ansonsten aber suboptimale Ergebnisse ;) Mit Software ist das nicht anders. Wenn eine Resource nicht gemeinsam genutzt werden kannen, dann darf nur Einer "ran" und die Anderen müssen warten. Das, salopp gesagt, stellt die Synchronisation (und mit ihr die Warteschlangen) sicher. Ohne Synchronisation gibt es allerlei Kuddel-Muddel, auf keinen Fall aber ein korrektes Programm.

Aus der heutigen Computertechnik ist das Multithreading, also die parallele Ausführung verschiedener Tätigkeiten zu einer Zeit, nicht mehr wegzudenken. Die Bedeutung wird sogar noch wachsen: Der einzelne Rechner, zumindest mit konventioneller Technik, kann kaum mehr beschleunigt werden  (aber das ist ein Thema für einen eigenen Blog-Post). Die Nutzung verschiedener Threads wird damit immer mehr zur Pflicht.

Nun müssen natürlich nicht immer alle Threads genau das gleiche machen. Es ist alles eine Frage der Organisation. So kann man sich auch in der Gartenarbeit, im Beispiel mit nur drei Gießkannen, durchaus das Zusammenwirken von vier Personen vorstellen. Die müssen ihre Arbeit dann nur clever aufteilen - und genau so muss der Programmierer ein "geeignetes Threading-Modell" finden.

Ich hoffe, ihnen hat der kleine Ausflug in die Gartenarbeit gefallen. Weiter hoffe ich, dass wir uns damit ein wichtige Grundlage für weitere Postings gebildet haben. Ihr Feedback würde mich bei einem solchen "Erstversuch" in Bezug auf Analogien sehr interessieren - nutzen sie doch bitte die Kommentarfunktion!

 



antworten

Artikel kommentieren
 authimage
szmtag