2010-02-10 11 views

Antwort

1

In den meisten Systemen Lightweight-Threads sind die normalen Threads, die Sie mit Hilfe der Bibliothek erstellen, wie p_threads in Linux.

Während Schwergewicht, in einigen Systemen, beziehen sich auf einen Systemprozess, mit seinem eigenen virtuellen Speicher und einer komplexeren Struktur, wie Informationen über die Prozessleistung/Statistiken.

Für weitere Informationen:

http://www.computerworld.com/s/article/66405/Processes_and_Threads

http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx

25

es auf die Menge an „Kontext“ verwandt ist mit einem Gewinde verbunden ist, und folglich wird die Menge an Zeit, die eine „Kontextumschaltung auszuführen ".

Heavyweight-Threads (normalerweise Kernel/OS-Level-Threads) haben eine Menge Kontext (Hardware-Register, Kernel-Stacks, usw.). Es braucht also viel Zeit zwischen den Threads zu wechseln. Heavyweight-Threads können auch Einschränkungen für sie haben, zum Beispiel können auf einigen Betriebssystemen Kernel-Threads nicht vorweggenommen werden, was bedeutet, dass sie nicht gewaltsam ausgewechselt werden können, bis sie die Kontrolle aufgeben.

Lightweight-Threads dagegen (normalerweise User-Space-Threads) haben viel weniger Kontext. (Sie teilen im Wesentlichen den gleichen Hardware-Kontext) Sie müssen nur den Kontext des Benutzer-Stacks speichern, daher ist die Zeit, die zum Wechseln von Lightweight-Threads benötigt wird, viel kürzer.

Auf den meisten Betriebssystemen sind alle Threads, die Sie als Programmierer im Benutzerbereich erstellen, im Vergleich zu den Kernel-Space-Threads leichtgewichtig. Es gibt keine formale Definition von Heavyweight und Lightweight, es ist eher ein Vergleich zwischen Threads mit mehr Kontext und Threads mit weniger Kontext. Vergessen Sie nicht, dass jedes Betriebssystem eine eigene Implementierung von Threads hat, und die Linien zwischen schweren und leichten Threads sind nicht unbedingt klar definiert. In einigen Programmiersprachen und Frameworks, wenn Sie einen "Thread" erstellen, erhalten Sie möglicherweise nicht einmal einen vollständigen Thread, Sie erhalten möglicherweise nur eine Abstraktion, die die tatsächliche Anzahl der darunter liegenden Threads verbirgt.

[Einige OSes erlauben Threads Adressraum zu teilen, so Threads, die in der Regel ziemlich schwer sein würde, sind etwas leichter]

4

Java Standard Themen sind ziemlich schwer im Vergleich zu Erlang Fäden, die sehr leicht spawnable Prozesse sind. Erlang demonstriert eine verteilte Zustandsmaschine. Als Beispiel schlägt http://kilim.malhar.net/, eine Java-Erweiterungsbibliothek, die auf dem Actor-Modell der Parallelität basiert, ein Konstrukt für leichte Threads in Java vor. Anstatt Thread run() zu implementieren, implementiert ein Kilim-Thread die Kilim-Bibliothek mithilfe einer execute() -Methode. Anscheinend zeigt es, dass die Laufzeit von Java die Leistung von Erlang übertrifft (zumindest in einer lokalen Umgebung AFAIK). Java hatte tatsächlich solche Dinge in der ursprünglichen Sprachspezifikation namens "grüne Threads", aber nachfolgende Java-Versionen ließen sie zugunsten nativer Threads fallen.