- Fiber
-
Als User Thread, User-level Thread oder Fiber (Windows) bezeichnet man in der Informatik eine bestimmte Art, Programme bzw. Programmteile verzahnt 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.
Inhaltsverzeichnis
Scheduling
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 nicht von der Existenz der User Threads weiß, muss das Scheduling der User Threads vom Programm selbst beziehungsweise von 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. So 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 bereitstellen muss.
Andere Sichtweise
Das Konzept der User Threads kann auch als Erweiterung der Konzepte von Prozeduren oder Funktionen in entsprechenden Programmiersprachen gesehen werden. Ein User Thread entspricht in 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 ein Mal und an verschiedene Stellen "zurückkehren". Diese Sichtweise spiegelt sich auch in der Art wider, in der in einigen Systemen User Threads deklariert werden, nämlich als eine gesonderte Prozedur je User Thread.
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.
Windows
Windows bietet User Threads seit Windows 98, hier werden sie Fibers genannt.[1] Der Begriff Fiber (dt. Faser) kann hier als Anlehnung an das natürliche Verhältnis von Thread (dt. Faden) und Fiber verstanden werden: Eine Faser (Fiber) ist dünner und einfacher als ein Faden (Thread); ein Faden kann aus mehreren Fasern gewoben sein.
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.[2]
Solaris
Die Namenskonvention unter Solaris weicht von Windows und Linux ab. Ein Kernel Thread wird hier Lightweight Process genannt, ein User Thread einfach als Thread bezeichnet. Ein Solaris-Thread kann auch anderen Lightweight Processes desselben Prozesses zugeordnet werden.[3]
Java Virtual Machine
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]
Literatur
- ↑ www.cprogramming.com
- ↑ Vergleich von LinuxThreads und NPTL auf ibm.com
- ↑ Threads unter Solaris und Windows NT
- ↑ Tricks of the Java Programming Gurus, Glenn L. Vanderburg. et al.: Onlineversion auf docs.rinet.ru
- Andrew S. Tanenbaum: Modern Operating Systems (S. 515–518). Prentice Hall, Englewood Cliffs, New Jersey 1992, ISBN 0-13-595752-4.
Weblinks
- Ralf S. Engelschall: Portable Multithreading – Implementierung von User Threads auf Unix Systemen
Wikimedia Foundation.