Zum Inhalt springen

User-Thread

aus Wikipedia, der freien Enzyklopädie

Als User-Thread (auch Userthread geschrieben), gelegentlich auch Userlevel-Thread und z. B. unter Windows Fiber (s. u.) genannt, wird in der Informatik eine bestimmte Art, Programme bzw. Programmteile verzahnt ablaufen zu lassen, bezeichnet. Die Funktionalität ist dabei nicht direkt im Kernel implementiert (wie bei einem Kernel-Thread), sondern in einer separaten Programmbibliothek, die im Userspace liegt.<ref name="Richter99">Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.</ref> Dadurch ist ein Kontextwechsel (Taskswitching) zwischen den Userthreads ohne aufwendige Systemaufrufe möglich, wodurch Kontextwechsel deutlich schneller sind als zwischen Kernelthreads oder Prozessen.

Scheduling[Bearbeiten]

Da die User-Threads innerhalb eines Kernel-Threads prinzipiell nicht gleichzeitig ([pseudo-]parallel), sondern nur nacheinander ausgeführt werden, können die User-Threads nicht sinnvoll auf mehrere Prozessoren verteilt werden. Da das Betriebssystem nichts von der Existenz der User-Threads weiß, muss das Scheduling (Zeitablaufsteuerung) der User-Threads vom Programm selbst beziehungsweise von der eingesetzten Programmbibliothek erledigt werden. Dabei wird praktisch immer kooperatives Scheduling betrieben und nicht präemptives (von engl. Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden., ‚bevorrechtigt‘). Die User-Threads müssen also von sich aus die Kontrolle abgeben.

Dies ist allerdings dann problematisch, wenn einer der User-Threads einen blockierenden Systemaufruf tätigt. Dadurch, dass dieser User-Thread blockiert ist, wird es ihm unmöglich, die Kontrolle an einen anderen User-Thread abzugeben – auf diese Weise wird das gesamte Programm blockiert. Dieses Problem kann jedoch umgangen werden, indem die genutzte Bibliothek dem User-Thread Ersatzfunktionen bereitstellt. Die Bibliothek nutzt dann ausschließlich nichtblockierende Systemaufrufe des Betriebssystems, die dieses bereitstellen muss.

Andere Sichtweise[Bearbeiten]

Das Konzept der User-Threads kann auch als Erweiterung der Konzepte von Prozeduren oder Funktionen in entsprechenden Programmiersprachen gesehen werden. Ein User-Thread entspricht nach dieser Sichtweise einer Prozedur, die von anderer Stelle aufgerufen wird (über das explizite Scheduling genau dieses User-Threads). Eine solche Prozedur kehrt jedoch nicht unbedingt an genau einer Stelle zum Kontrollfluss des Aufrufers zurück, sondern kann vielmehr über ihr selbst durchgeführtes Scheduling auch mehr als einmal und an verschiedene Stellen „zurückkehren“. Diese Sichtweise spiegelt sich auch in der Art wider, wie in einigen Systemen User-Threads deklariert werden – nämlich als eine gesonderte Prozedur je User-Thread.

Implementierungen[Bearbeiten]

User-Thread-Bibliotheken stehen unter vielen Betriebssystemen zur Verfügung, aber auch Interpreter können User-Threads unterstützen. Dabei unterscheidet sich die Benennung der User-Threads je nach Implementierung.

Windows[Bearbeiten]

Microsoft nennt die von ihr (seit Windows 98) unter Windows angebotenen User-Threads Fibers.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Das englische Wort Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden. (dt. ‚Faser‘ → ‚Fiber‘) kann hier als Anlehnung an das natürliche Verhältnis eines Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden. (englisch) – d. h. eines Fadens – zu einer Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden./Faser verstanden werden: Eine Faser/Fiber ist dünner und einfacher als ein Faden (Thread); ein Faden kann aus mehreren einzelnen Fasern gesponnen sein. Ein Thread kann unter Windows in einen Fiber konvertiert werden und umgekehrt.<ref name="Richter99" />

Linux[Bearbeiten]

User-Threads bieten unter Linux zum Beispiel die Bibliotheken LinuxThreads und GNU Portable Threads. LinuxThreads wird allerdings nicht mehr weiterentwickelt, und sein Nachfolger Native POSIX Thread Library (NPTL) ist keine reine Userspace-Bibliothek mehr.<ref>Vikram Shukla: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. (PDF; 50 kB) In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. IBM, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Solaris[Bearbeiten]

Die Namenskonvention unter Solaris weicht von der unter Windows und Linux ab. Ein Kernel-Thread wird hier als Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden. (engl.; ‚leichtgewichtiger Prozess‘ → vgl. Thread (Informatik)) bezeichnet und ein User-Thread schlicht Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden. genannt.
Ein Solaris-Thread kann auch anderen Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden. desselben Prozesses zugeordnet werden.<ref>Fabian Zabatta, Kevin Ying: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. 2nd USENIX Windows NT Symposium, 03.–05.08.1998Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. USENIX Association, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Java Virtual Machine[Bearbeiten]

Neuere Versionen der Java Virtual Machine (JVM) nutzen, falls vorhanden, die Möglichkeiten des lokalen Betriebssystems, um dem Programmierer Threads zur Verfügung zu stellen. Bei älteren Versionen oder falls das Betriebssystem Kernel-Threads nicht unterstützt, hat die JVM aber auch ihre eigene User-Thread-Funktionalität. Diese wird als Green Thread bezeichnet. Green Threads sind echte User-Threads, bieten aber trotzdem präemptives, prioritätsbasiertes Scheduling, das durch die JVM realisiert wird.<ref>Glenn L. Vanderburg et al.: [Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden.] Archiviert vom Vorlage:Referrer (nicht mehr online verfügbar) am 2009-05-25; (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Literatur[Bearbeiten]

  • Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references />