Was ist der Unterschied zwischen lightweight-Prozess und thread?
Fand ich eine Antwort auf die Frage hier. Aber ich verstehe nicht, einige Ideen in die Antwort. Zum Beispiel, leichte Prozess wird gesagt, um seinen logischen Adressraum mit anderen Prozessen. Was bedeutet es? Ich kann verstehen, dass die gleiche situation mit 2 threads: die beiden teilen sich einen Adressraum, so dass beide von Ihnen können Lesen Sie alle Variablen aus bss-segment (zum Beispiel). Aber wir haben eine Menge von verschiedenen Prozessen mit unterschiedlichen bss-Abschnitte und ich weiß nicht, wie zu teilen alle von Ihnen.
- Möglich dup stackoverflow.com/questions/200469/...
- Sie scheinen sehr verwirrt über einige Konzepte. Ich schlage vor, Sie zuerst Forschung die definition der thread und Prozess.
- Ich verstehe den Unterschied zwischen Prozessen und threads sehr deutlich. Das problem ist, mit Verständnis für einfache Prozesse.
- Ich habe es gefunden und es verstanden (in "Understanding the Linux kernel").
- Sicher @Allok. Es gab einige details über einfache Prozesse, die auf dieser Seite.
- Sie sagte in Ihrer Frage, dass 2 Prozesse teilen sich einen Adressraum, das ist nicht wahr. Zwei threads des selben Prozesses teilen sich den gleichen Adressraum.
- ja, natürlich)
- es gibt nur eine Antwort, die sagt etwas über die LWP. Und laut ihm gibt es keinen Unterschied.
Du musst angemeldet sein, um einen Kommentar abzugeben.
MSDN, Threads und Prozesse:
Ich bin nicht sicher, ob die Antworten richtig sind hier, also lasst mir die post meine version.
Gibt es einen Unterschied zwischen Prozess - LWP (lightweight process) und user-thread. Ich lasse Prozessdefinition abgesehen, dass da ist mehr oder weniger bekannt sind, und konzentrieren sich auf
LWP vs user threads
.LWP ist, was im wesentlichen werden als heute-threads. Ursprünglich, Benutzer-thread gedacht, ein thread, der ist von der Anwendung verwaltet sich selbst, und der kernel weiß nichts über es.
LWP, auf der anderen Seite, ist eine Einheit von Planung und Ausführung durch den kernel.
Beispiel:
Nehmen wir an, das system hat 3 andere Prozesse und scheduling round-robin-ohne Prioritäten. Und Sie haben 1 Prozessor/Kern.
Option 1. Sie haben 2 Benutzer-threads mit einer LWP. Das bedeutet, dass aus OS Sicht haben Sie EINE scheduling-Einheit. Total sind es 4 LWP läuft (3 andere + 1 bei Euch). Ihre LWP bekommt 1/4 der Gesamt-CPU-Zeit und da haben Sie 2 Benutzer-threads, jeder von Ihnen bekommt 1/8 der Gesamt-CPU-Zeit (je nach Umsetzung)
Option2. Sie haben 2 LWP. Aus OS-Sicht, haben Sie ZWEI scheduling-Einheiten. Total gibt es 5 LWP laufen. Ihre LWP wird 1/5 der Gesamt-CPU-Zeit die EINZELNEN und Ihre Anwendung, die 2/5 des CPU.
Anderen groben Unterschied - LWP hat pid (Prozess-id), die user-threads nicht.
Für einige Grund, die Benennung war ein wenig Durcheinander und wir finden LWP threads.
Gibt es definitiv Unterschiede, aber bitte, siehe Folien.
http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt
EDIT:
Nach der Veröffentlichung, fand ich einen guten Artikel, der erklärt alles in mehr details und ist in Englisch besser als ich Schreibe.
http://www.thegeekstuff.com/2013/11/linux-process-and-threads/
IMO, LWP ist ein kernel Fadenheftung, die erstellt werden können und im Anwendungs-Kontext ausgeführt.
Wenn ich mich nicht Irre, können Sie Benutzer threads an einen LWP, um potenziell erhöhen den Grad der Parallelität, ohne über einen system call.
Thread ist im Grunde Aufgabe mit einem Ziel und genügend Informationen, um eine bestimmte Aufgabe auszuführen .
Ein Prozess kann mehrere threads für seine Arbeit so schnell wie möglich.
e.g Ein Teil des Programms kann brauchen, input-output, einen Teil müssen möglicherweise Berechtigungen.
User-level-thread sind diejenigen, die behandelt werden können durch die thread-Bibliothek.
Auf der anderen Seite kernel-level-thread (muss befassen sich mit hadrware)sind auch als LWP(light weight process), die zur Maximierung der Nutzung des Systems und damit das system Stoppt nicht auf nur einem system-Aufruf.
Threads laufen innerhalb von Prozessen.
Jeder Prozess kann aus einem oder mehreren threads.
Wenn der kernel weiß nichts über die threads in den Prozess, wir haben threads auf user-space und damit kein multiprocessing-Funktionen sind verfügbar.
Auf der anderen Seite, wir haben threads auf kernel-space; dies bedeutet, dass jeder Prozess läuft auf einer anderen CPU. Dies ermöglicht uns schnelles, aber wie können Sie davon ausgehen, es ist mehr teuer in Bezug auf Ressourcen des Betriebssystems.
Endlich gibt es eine Lösung, die liegt irgendwo in der Mitte; wir die Gruppe von threads, die zusammen in LWP. Jede Gruppe läuft auf verschiedenen CPU, aber die threads in der Gruppe nicht multi verarbeitet. Das ist, weil der kernel in dieser version kennt, nur über die Gruppen (die multiprocessed), aber nichts über die Fäden, die Sie enthalten.
Hoffe, es ist klar genug.
Ein Prozeß enthält einen oder mehrere threads in es und ein thread kann alles tun, ein Prozess tun können. Auch threads innerhalb eines Prozesses im gleichen Adressraum, weil die Kosten der Kommunikation zwischen threads ist gering und mit der gleichen code-Abschnitt, Abschnitt Daten und OS-Ressourcen, so dass diese alle features der thread macht es ein "Leichtgewicht-Prozess".
Vom hier.
Jeder LWP ist einem kernel-Ressource im kernel-pool, und ist befestigt und losgelöst zu einem thread auf einer pro-thread-basis. Dies geschieht, wie Fäden sind, die geplant oder erstellt und zerstört werden.
Basierend auf Tanenbaum Buch "Vertreibt Systeme", geringes Gewicht-Prozesse bezeichnet allgemein eine hybrid-form von user-level-Threads und kernel-level-thread. Eine LWP wird im Kontext von einem einzigen Prozess, und es kann mehrere LWPs pro Prozess. Darüber hinaus wird jedes LWP ausgeführt werden kann, seine eigene (user-level) Threads. Multi-threaded-Anwendungen werden konstruiert, indem das erstellen von threads (mit der thread-Bibliothek-Paket), und anschließend die Zuordnung jeder thread einem LWP.
Der größte Vorteil der Verwendung dieser hybrid-Ansatz ist, dass das erstellen, entfernen und synchronisieren von threads ist relativ Billig und benötigen keine kernel-intervention. Neben, dass, vorausgesetzt, dass ein Prozess hat genug LWPs, einen blockierenden system call wird nicht zu unterbrechen den gesamten Prozess.