User Thread
aus Wikipedia, der freien Enzyklopädie
Als User Thread, User-level Thread oder Fiber (Windows) bezeichnet man in der Informatik eine bestimmte Art, Programme bzw. Programmteile parallel ablaufen zu lassen. Die Funktionalität ist dabei nicht direkt im Betriebssystemkern implementiert (wie bei einem Kernel Thread), sondern in einer separaten Programmbibliothek, die im Userspace liegt. Dadurch ist ein Kontextwechsel zwischen den User Threads ohne aufwendige Systemaufrufe möglich, wodurch Kontextwechsel deutlich schneller sind als zwischen Kernel Threads oder Prozessen.
Da das Betriebssystem von der Existenz der User Threads nichts weiß, können die User Threads nicht auf mehrere Prozessoren verteilt werden. Aus dem selben Grund muss das Scheduling der User Threads vom Programm selbst beziehungsweise der eingesetzten Programmbibliothek erledigt werden. Dabei wird praktisch immer kooperatives Scheduling betrieben und nicht präemptives. Die User Threads müssen also von sich aus die Kontrolle abgeben.
Dies ist 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. Dadurch wird das gesamte Programm blockiert. Dieses Problem kann umgangen werden, indem die genutzte Bibliothek dem User Thread Ersatzfunktionen bereit stellt. Die Bibliothek nutzt dann ausschließlich nichtblockierende Systemaufrufe des Betriebssystemes, die dieses natürlich bereitstellen muss.
Inhaltsverzeichnis |
[Bearbeiten] Implementierungen
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.
[Bearbeiten] Windows
Windows bietet User Threads seit Windows 98, hier werden sie Fibers genannt.[1] Dabei sind eine oder mehrere Fibers fest einem Kernel Thread zugewiesen.[2]
[Bearbeiten] Linux
User Threads bieten unter Linux zum Beispiel die Bibliotheken LinuxThreads und GNU Portable Threads. LinuxThreads wird nicht mehr weiterentwickelt, der Nachfolger Native POSIX Thread Library (NPTL) ist keine reine Userspace Bibliothek mehr.[3]
[Bearbeiten] Solaris
Die Namenskonvention unter Solaris weicht von Windows und Linux ab. Kernel Threads werden hier Lightweight Process genannt, User Threads einfach als Thread bezeichnet. Im Gegensatz zu Windows ist ein Solaris-Thread nicht zwangsläufig an einen einzigen Lightweight Process gebunden, sondern kann auch anderen Lightweight Processes des selben Prozesses zugeordnet werden.[2]
[Bearbeiten] Interpreter
Neuere Versionen der Java Virtual Machine nutzen, falls vorhanden, die Möglichkeiten des Betriebssystemes 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, die als Green Threads bezeichnet wird. Green Threads sind echte User Threads, bieten aber trotzdem präemptives, prioritätsbasiertes Scheduling, das durch die JVM realisiert wird.[4]