Thread (Informatik)

Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 14. Mai 2005 um 16:40 Uhr durch HaeB (Diskussion | Beiträge) (Änderungen von Benutzer:84.135.58.78 rückgängig gemacht und letzte Version von Benutzer:Phulab wiederhergestellt). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Unter einem Thread Vorlage:Lautschrift (engl. thread = Faden, Strang) versteht man

  1. 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,
  2. 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