Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

User-Thread

Thread (Informatik)) bezeichnet und ein User-Thread schlicht thread genannt. Ein Solaris-Thread kann auch anderen lightweight processes desselben Prozesses …

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Scheduling und Grenzen
  3. 3. Sicht als erweiterte Prozedur
  4. 4. Implementierungen in Betriebssystemen
  5. 5. User-Threads in der JVM

Grundidee und Bedeutung

Ein User-Thread, auch Userthread oder Userlevel-Thread genannt, ist eine Art, Programme oder Programmteile verzahnt ablaufen zu lassen. Anders als bei einem Kernel-Thread ist die Thread-Funktionalität nicht direkt im Kernel des Betriebssystems implementiert, sondern in einer Programmbibliothek im Userspace, also außerhalb des Kernels.

Der wichtige Vorteil ist der schnellere Kontextwechsel: Wenn zwischen User-Threads umgeschaltet wird, sind keine aufwendigen Systemaufrufe nötig. Deshalb ist das Taskswitching zwischen User-Threads deutlich schneller als zwischen Kernel-Threads oder Prozessen.

Scheduling und Grenzen

User-Threads innerhalb eines Kernel-Threads laufen grundsätzlich nicht gleichzeitig, auch nicht sinnvoll pseudo-parallel, sondern nacheinander. Darum lassen sie sich nicht sinnvoll auf mehrere Prozessoren verteilen. Das Betriebssystem kennt diese User-Threads nicht, deshalb muss das Scheduling, also die Zeitablaufsteuerung, vom Programm selbst oder von der verwendeten Programmbibliothek übernommen werden.

In der Praxis wird fast immer kooperatives Scheduling verwendet. Das bedeutet: Ein User-Thread muss die Kontrolle freiwillig abgeben. Präemptives Scheduling, bei dem ein Thread von außen unterbrochen werden kann, wird hier normalerweise nicht genutzt.

Ein Problem entsteht bei blockierenden Systemaufrufen. Wenn ein User-Thread einen solchen Aufruf ausführt, kann er nicht mehr selbst die Kontrolle an einen anderen User-Thread abgeben. Dadurch blockiert das ganze Programm. Um das zu vermeiden, kann die Bibliothek Ersatzfunktionen anbieten und intern ausschließlich nichtblockierende Systemaufrufe des Betriebssystems verwenden, sofern das Betriebssystem sie bereitstellt.

Sicht als erweiterte Prozedur

User-Threads können auch als Erweiterung von Prozeduren oder Funktionen verstanden werden. Ein User-Thread entspricht dann einer Prozedur, die durch explizites Scheduling von einer anderen Stelle aus aufgerufen wird.

Der Unterschied zu einer normalen Prozedur ist: Ein User-Thread kehrt nicht unbedingt nur an genau eine Stelle im Kontrollfluss des Aufrufers zurück. Durch eigenes Scheduling kann er auch mehrmals und an verschiedene Stellen zurückkehren. Diese Sichtweise passt dazu, dass User-Threads in manchen Systemen als eigene Prozedur je User-Thread deklariert werden.

Implementierungen in Betriebssystemen

User-Thread-Bibliotheken gibt es unter vielen Betriebssystemen, und auch Interpreter können User-Threads unterstützen. Die Bezeichnung unterscheidet sich je nach System.

Unter Windows heißen die seit Windows 98 angebotenen User-Threads Fibers. Ein Thread kann dort in einen Fiber konvertiert werden und umgekehrt.

Unter Linux bieten zum Beispiel die Bibliotheken LinuxThreads und GNU Portable Threads User-Threads. LinuxThreads wird jedoch nicht mehr weiterentwickelt. Sein Nachfolger Native POSIX Thread Library (NPTL) ist keine reine Userspace-Bibliothek mehr.

Unter Solaris ist die Benennung anders: Ein Kernel-Thread heißt dort Lightweight process, also leichtgewichtiger Prozess, während ein User-Thread schlicht thread genannt wird. Ein Solaris-Thread kann auch anderen Lightweight Processes desselben Prozesses zugeordnet werden.

User-Threads in der JVM

Neuere Versionen der Java Virtual Machine (JVM) verwenden, wenn möglich, die Thread-Möglichkeiten des lokalen Betriebssystems, um Programmierern Threads bereitzustellen.

Ältere JVM-Versionen oder Systeme ohne Kernel-Thread-Unterstützung konnten aber auch eine eigene User-Thread-Funktionalität der JVM nutzen. Diese heißt Green Thread. Green Threads sind echte User-Threads, bieten aber trotzdem präemptives, prioritätsbasiertes Scheduling. Dieses Scheduling wird von der JVM umgesetzt.

Lernvideos zu User-Thread

Weiterlesen

Microsoft Windows Microsoft Windows (englische Aussprache [ˈmaɪ.kɹoʊ.sɒft ˈwɪn.doʊz]) bzw. Windows ist eine Reihe proprietärer grafischer Betriebssystemfamilien von Microsoft … Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … Kernel (Betriebssystem) Ein Kernel (englisch [ˈkɝːnəl], übersetzt Kern), auch Betriebssystemkern (oder verkürzt Systemkern), ist der zentrale Bestandteil eines Betriebssystems. Thread (Informatik) Kritischer Abschnitt · Nebenläufigkeit · Parallele Programmierung · Prozess · Threadsicherheit. Literatur. Bearbeiten. Peter Ziesche: Nebenläufige & verteilte … Kontextwechsel Kontextwechsel oder Taskswitching (englisch context switch) nennt man den Vorgang in einem Betriebssystem, bei dem die Bearbeitung des aktuellen Prozesses … Prozess (Informatik) Ein Prozess ist die Ablaufumgebung für ein Programm auf einem Rechnersystem sowie der darin eingebettete Binärcode des Programmes während der Ausführung. Ein … Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Multitasking Der Begriff Multitasking [ˌmʌltiˈtɑːskɪŋ] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fähigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) … Englische Sprache Die englische Sprache (Eigenbezeichnung: [ˈɪŋɡlɪʃ]) ist eine ursprünglich in England beheimatete germanische Sprache, die zum westgermanischen Zweig gehört. Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es …