In Pthreads unter Linux wird die Thread-Planung vom Kernel verarbeitet.
In Linux wird ein Thread oder Prozess mit dem Systemaufruf clone()
erstellt (fork()
ist ein Sonderfall von Klon). In Abhängigkeit von den an den Klon übergebenen Optionen wird der neu erzeugte Prozess ein geringeres Gewicht oder ein höheres Gewicht haben (d. H. Einen separaten Speicherraum und einen separaten Satz von Dateideskriptoren usw.). pthread_create()
verwendet clone()
mit einem Minimum an Trennung.
Es ist auch möglich, native Threads überhaupt nicht zu verwenden und stattdessen eine vollständige Userspace-Implementierung von Threading zu verwenden, die setjmp()
und longjmp()
verwendet. Dies könnte zum Beispiel verwendet werden, um eine interpretierte Sprache zu implementieren. Mir ist jedoch kein konkretes Beispiel für ein Programm oder eine Bibliothek bekannt, die tatsächlich einen eigenen Userspace-Scheduler implementiert.
Noch eine Sache: ein "Kernel-Thread" wird im Allgemeinen verwendet, um einen Thread zu bezeichnen, der im Kernelraum läuft, d.h. der Teil des Kernels selbst ist. In ps
sind solche Gewinde erkennbar, da sie von eckigen Klammern umgeben sind, wie [kthreadd]
.
Die LinuxThreads-Implementierung verwendet immer noch 1: 1-Benutzer-Threads zur kernplanbaren Thread-Zuordnung (nur die Prozesse werden zugeordnet und NPTL - glibcs Posix-Threads werden Kernel-planbaren Threads zugeordnet). Es gab nur NGPT (Next Generation POSIX Threads) bis 2003 mit wahrscheinlich nicht 1: 1 Mapping; und https://en.wikipedia.org/wiki/Green_threads werden manchmal in Sprachdolmetschern implementiert. – osgx
@osgx OK, danke für die Erklärung. Ich habe den Verweis auf LinuxThreads entfernt, um Verwirrung zu vermeiden. – Arnout