Prozess, Thread, PID, ... ?

Wubudu

Newbie
Registriert
Jan. 2008
Beiträge
5
Guten Morgen,

Ich hab eine kurze und knappe Frage: Was bedeutet: Thread, Prozess, PID, ... ? Wovon unterscheiden die sich?


MfG
Wubudu
 
Moin moin.

Kurze und knappe Antwort ;)

Ein Prozess wird vom Betriebssystem gestartet. Eine normale Anwendung läuft z.B. in einem Prozess. Dieser Prozess läuft aus Sicht der Anwendung einfach konstant ab. Real hält das BS den Prozess immerwieder an und wechselt zwischen allen laufenden Prozessen nach diversen Regeln (z.B. Priorität) immer wieder ab. Das ist Multitasking.
Jeder Prozess verfügt dabei über einen eigenen virtuellen Speicherraum, der auf den realen, physischen Speicher abgebildet wird. D.h. verschiedene Prozesse können sich nicht gegenseitig "in den Speicher schauen".

Jeder Prozess bekommt vom BS eine ID zugeteilt, die ProzessID oder PID.

Ein Thread ist im wesentlichen nichts anderes als ein Prozess. Unter diversen unixoiden BS wird ein Thread auch LightWeightProcess (LWP) genannt. Ein Thread wird von einem Prozess aus gestartet. Damit ist Multithreading möglich. Er läuft zeitlich gesehen unabhänging vom Prozess, der ihn gestartet hat. Damit wird einen Synchronisation zwischen verschiedenen Threads nötig. Der eigentliche Prozess einer Anwendung wird oft auch Main Thread genannt. Ein wichtiger Unterschied zum Prozess ist, dass sich alle Threads eines Prozesses sich den virtuellen Speicher teilen, d.h. ihn gegenseitig lesen und schreiben können und somit miteinander kommunizieren.

Jeder Thread bekommt vom BS wieder eine ThreadID oder TID. Diese TID wird oft pro Prozess vergeben und macht daher nur im Kontext des dazugehörigen Prozesses Sinn.

Threads und Prozesse können übrigens auf verschiedenen Prozessoren/Kernen ablaufen, sofern mehrere vorhanden sind.

Frage beantwortet? :)
 
wow, Respekt für die gute und verständliche Erklärung ich hätte sonst auf Wikipedia verwiesen.

Thread
Prozess
PID

Zum verfeinern ;)
 
@7H3 N4C3R: Ich versteh dich nicht?! Geht das auch einfacher

:eek:
 
Kann man Quantenphysik so vereinfachen, dass auch Achtklässler sie versteht?

Ein gewisses Grundverständnis sollte man sich schon erarbeitet haben ;)
 
Also ganze einfach gesagt:
Prozess entspricht quasi einer Anwendung.
Thread ist ein Ausführungsstrang eines Prozesses, also wenn ein Programm selbst mehrere Dinge gleichzeitig erledigen möchte (also z.B. die Kopierfenster im Explorer, von denen du mehrere offen haben kannst, sind über Threads realisiert, früher war das noch nicht so, da konnte man in dem Fall nicht mit dem Explorer weiterarbeiten)
PID = Prozess-ID, die ID, die der Prozess beim Erstellen vom Betriebssystem zugewiesen bekommt, anhand der er angesprochen werden kann (vergleichbar mit Personalausweisnummer, Sozialversicherungsnummer etc) - die PID ist nur von temporärer Gültigkeit, also nach dem Beenden und Neustarten eines Prozesses bekommt er sehr wahrscheinlich eine neue PID.
 
Als Metapher:

Wir stellen uns eine simple Firma vor:
Dort gibt es einen Chef. Der Chef ist das Betriebssystem, er verwaltet das ganze Irrenhaus. Prozesse sind seine Mitarbeiter, sie erfüllen irgendwelche Funktionen, wie deine PC Programme auch.
Die Mitarbeiter wiederrum haben selber kleine Helfer, das sind Threads. Die erfüllen irgendwelche Funktionen für die Mitarbeiter, so dass dieser sich auf andere Dinge konzentrieren kann.

Wenn der Chef einen Mitarbeiter beauftragt etwas zu erledigen, dann bekommt dieser eine Nummer auf die Stirn gestempelt, das ist ein PID (ProzessID). Nach Beenden seiner Aufgabe wird der Stempel wieder entfernt.

Zusammengefasst:
Firma -> dein PC
Chef -> das Betriebssystem
Mitarbeiter -> Prozess
Helfer d. Mitarbeiter -> Thread
Stempel auf Mitarbeiterstirn -> PID

Alle Klarheiten beseitigt? :)
 
Zuletzt bearbeitet:
Also ich fange mal beim Urschleim an :)

Ein Rechner hat überlicherweise nur eine CPU (bzw. eine begrenzte Anzahl davon, aber das lassen wir der Einfachheit halber mal weg).

Auf dieser CPU läuft ein einziges Programm der Reihe nach ab nach dem Prinzip "eines nach dem anderen", nichts geht gleichzeitig.
Wenn du nun ganz normal mit z.B. Windows arbeitest, hast du diverse Programme am Laufen, Browser, WinAmp, E-Mail-Client, etc. Haufenweise verschiedene Programme laufen auch im Hintergrund ab, z.B. Dienste. Und alles macht den Eindruck, dass es "gleichzeitig" passiert - was aber nicht geht, da eben nur eine CPU vorhanden ist.

Das Betriebssystem sorgt genau dafür, dass viele Programme scheinbar gleichzeitig laufen - indem es jedes Programm für eine kurze Weile auf dem Prozessor laufen lässt, dann wieder zum Nächsten wechselt, dieses laufen lässt, etc. Das geschieht so schnell, dass du als Anwender davon nichts bemerkst.

Als Entwickler eines Programmes muss man sich darum überhaupt nicht kümmern. Man schreibt seinen Code einfach der Reihe nach runter und muss sich keine Gedanken soweit darüber machen, dass das eigene Programm gelegentlich unterbrochen wird, damit andere dran kommen, und danach wieder fortgesetzt wird. Aus Entwicklersicht läuft das Programm einfach in einem Faden ab. Das ist ein Thread (engl. Thread = Faden). Ein Thread ist also ein "virtueller Prozessor", auf dem das Programm abläuft. Dieser wird vom Betriebssystem bereitgestellt. (genau genommen sind das Kernel-Threads - aber darüber brauchst du dir erstmal keine Gedanken zu machen)

Die verschiedenen Threads, die alle "gleichzeitig" ablaufen, werden vom Betriebssystem in Prozesse organisiert. Ein Prozess hat 1 bis x Threads. Ein Thread gehört also immer zu einem bestimmten Prozess.
Ein Prozess ist quasi eine laufende Anwendung. So ein Prozess hat immer mindestens einen Thread - den Hauptthread oder MainThread - denn ein Prozess selbst wird nicht ausgeführt, sondern nur Threads.

Wenn so ein Prozess / so eine Anwendung nun mehrere Dinge "gleichzeitig" tun will (z.B. eine Datei kopieren, etwas aus dem Internet runterladen und dazu noch etwas anderes ausdrucken), so startet er neue Threads.


Das Betriebssystem muss nun alle Prozesse, die es kennt, irgendwie organisieren. Dazu verpasst es jedem Prozess, der gerade läuft, eine Nummer - die Prozess ID (PID). Zusätzlich dazu bekommt auch jeder Thread eine Nummer verpasst, die Thread ID (TID). Diese werden normalerweise pro Prozess, zu dem sie gehören, durchnummeriert.

Bsp (völlig fiktive Nummern, nur als Beispiel):
Firefox : PID 652347.
- Thread (TID 1)
- Thread (TID 2)
- Thread (TID 3)

WinAmp : PID 543624
- Thread (TID 1)
- Thread (TID 2)

Mit einer TID alleine kann man also nichts anfangen, man braucht auch immer die PID dazu.

Diese IDs sind nur solange gültig, solange ein Programm läuft. Wird es neu gestartet, bekommt es eine andere PID. Auch wenn das Programm nach einem Betriebssystemneustart wieder gestartet wird, hat es eine neue PID.


War das so verständlicher? Eine Rückmeldung wäre nett. :)
 
@samotyr: Dieser Vergleich ist gar nicht schlecht, aber ich würde vielleicht die Firma direkt als Prozess betrachten, dann sind die Threads auch klar (die Mitarbeiter)...
 
Ja, ist sich recht ähnlich, die Threads sind quasi die Mitarbeiter der Mitarbeiter :)
 
Naja, wenn schon den Vergleich mit der Firma, dann schon so:

Firma: PC
Chef: Betriebsystem (Vergibt Ressourcen und Aufgaben / Erlaubt und verbietet)
Abteilung: Prozess (Hat gewisse vom Chef zugeteilte Ressourcen zur Verfügung, darf aber nur über bestimmte vom Chef erlaube Kanäle (Interfaces) mit anderen Abteilungen kommunizeren)
Abteilungsname: PID
Mitarbeiter: Thread (Darf innerhalb seiner Abteilung die vom Chef und vom Abteilungsleiter genemigten Ressourcen nutzen, dabei können verschiedene Mitarbeiter die selben Ressourcen nacheinander nutzen)
Mitarbeitername: TID

Trotzdem finde ich passt die Erklärung von 7H3 N4C3R trotzdem besser ;)
 
Zurück
Oben