Thread (Informatik)
Unter einem Thread Vorlage:Lautschrift (engl. thread = Faden, Strang) versteht man
- im Usenet und in vergleichbaren Web-Foren eine Folge von Diskussionsbeiträgen, von denen jeder mit Ausnahme des Ursprungs einen anderen Beitrag beantwortet (durch Bezugnahme mit einem References:-Feld) und die deshalb hierarchisch organisiert sind,
- in der Software-Architektur einen Ausführungsstrang innerhalb eines Prozesses, der nebenläufig zu anderen Threads ausgeführt werden kann.
Die folgenden Erläuterungen beziehen sich auf die zweite Bedeutung.
Auf Betriebssystemen, die Threads unterstützen, ist der Verwaltungsaufwand für Threads üblicherweise geringer als der für Prozesse. Ein wesentlicher Effizienzvorteil von Threads besteht darin, dass im Gegensatz zu Prozessen beim Threadwechsel kein vollständiger Austausch des Prozesskontextes notwendig ist, da ja alle Threads einem gemeinsamen Teil des Prozesskontextes verwenden.

Das Bild zeigt die beschriebenen Zusammenhänge im Detail. Ein Thread teilt sich mit den anderen vorhandenen Threads des zugehörigen Prozesses eine Reihe von Betriebsmitteln, nämlich das Codesegment, das Datensegment und die verwendeten Dateideskriptoren. Allerdings bewahrt jeder Thread seinen eigenen Befehlszähler und seinen eigenen Stack. Durch die gemeinsame Nutzung des Speicherbereichs kann es natürlich auch zu Konflikten kommen. Diese müssen durch den Einsatz von Synchronisationsmechanismen aufgelöst werden. Die Gesamtheit zusammengehöriger Threads inklusive ihrer Betriebsmittel bezeichnet man als Task.
Da Threads, die dem selben Prozess zugeordnet sind, den gleichen Adressraum verwenden, ist eine Kommunikation zwischen diesen Threads von vorneherein möglich (vgl. mit Interprozesskommunikation bei Prozessen).
Threads innerhalb des gleichen Prozesses verwenden voneinander unabhängige Stapel (Stacks), die unterschiedlichen Abschnitten des Adressraums zugeordnet sind.
Jeder Programmfaden ist für die Ausführung einer bestimmten Aufgabe verantwortlich. Die Ausführungsstränge der Programmfunktionen können damit in überschaubare Einheiten aufgeteilt werden.
Siehe auch
Literatur
- Marcus Roming, Joachim Rohde: Assembler - Grundlagen der Programmierung, MITP-Verlag, ISBN 3-8266-0671-X
- Olaf Neuendorf: Windows Multithreading mit C++ und C# MITP-Verlag, ISBN 3-8266-0989-1
- Heinz Kredel, Akitoshi Yoshida: Thread- und Netzwerk-Programmierung mit Java Dpunkt Verlag, ISBN 3-89864-133-3
- Rainer Oechsle: Parallele Programmierung mit Java Threads, Hanser Fachbuchverlag, ISBN 3-446-21780-0
- Andrew S. Tanenbaum: Moderne Betriebssysteme, Pearson Studium Verlag, ISBN 3-8273-7019-1
- Hans Joachim Müschenborn: OS/2 Systemprogrammierung. Multitasking - Interprozesskommunikation - Multithreading - DB/2-Integration, tewi-Verlag, ISBN 3-89362-344-2
Weblinks
- Programmierung mit POSIX- und Java-Threads - Pack die Threads in den Bankomat!
- Prozesse und Threads - Hintergrund und aktuelle Entwicklungen - Klon-Debatte
- Forum
- Antworten zu häufig gestellten Fragen aus comp.programming.threads (englisch)
- Frequently Asked Questions, Most FAQ (englisch)
- Diskussion "Writing a scalable server" (englisch)
- The C10K problem (englisch)
- Business logic processing in a socket server - thread pools (englisch)