Lassen Sie uns zunächst definieren die Begriffe
Benutzerebenen-Thread: - ein Faden, der durch eine Bibliothek außerhalb des Kernel erstellt und verwaltet werden. Der Kernel ist sich dieser Threads nicht direkt bewusst.
Kernel-Level-Threads: - erstellt und verwaltet von Kernel. Für jede Kernel-Ebene behält der Thread-Kernel eine Datenstruktur bei, um zugehörige Informationen zu speichern.
Obwohl diese Definitionen nicht allgemeingültig sind, stimmen die meisten Autoren in der Literatur überein. (Betriebssystemkonzepte, moderne Betriebssysteme usw.)
Wenn wir über Threads sprechen, die von einer Bibliothek erstellt wurden, handelt es sich immer um Threads auf Benutzerebene. Der zu verstehende Punkt ist das Mapping von Threads auf Benutzerebene zu Threads auf Kernel-Ebene.
Es hängt von der Bibliothek (JVM, .NET) ab, welche Art von Mapping verwendet wird. Es kann ein Eins-zu-eins-Modell verwenden, bei dem jeder Thread auf Benutzerebene seinem eigenen Thread auf Kernel-Ebene zugeordnet wird. Oder es kann viele zu einem Modell verwenden, bei denen mehr als ein Benutzer-Thread demselben Kernel-Thread zugeordnet ist.
Soweit es Linux betrifft, unterscheidet es nicht zwischen Prozess und Thread, aber es bietet Ihnen die Möglichkeit, die Ebene der Ressourcenfreigabe zwischen Eltern und Kind zu steuern. Sie können dies tun, indem Sie den Klon-Systemaufruf verwenden. Wenn Sie einen untergeordneten Prozess mit maximaler Freigabe erstellen, ist dies effektiv ein Thread. Auf der anderen Seite, wenn Sie Flags zum Klonen übergeben, so dass nichts geteilt wird, als es ein Prozess ist.
Zusammenfassende Threads in Programmierbibliotheken sind immer Threads auf Benutzerebene. Weil sie vom Kernel weder erstellt noch (direkt) verwaltet werden.
Danke. Wie kann ich feststellen, ob eine Bibliothek einer Sprache "Benutzer-Threads" oder "Kernel-Threads" anbietet? Zum Beispiel in Java oder in einer anderen Sprache, mit der Sie vertraut sind? – Ben
@Ben Die Sprachspezifikation überlässt es der Implementierung normalerweise, zu entscheiden, welche Art von Threads die Implementierung verwendet. –