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
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.