Zitat von
Lerran
Das mit der Größenordnung ist ein gutes Beispiel. Wenn ich jetzt mal in den Windows-10-Task-Manager gucke im Reiter Leistung und CPU. Verstehe ich das richtig, dass z. B. eine Anwendung "Beispiel.exe" aus 5 Prozessen besteht. Diese 5 Prozesse teilen sich dann wiederum auf in 10 Threads. Richtig so?
Ich weiß gerade nicht aus dem Kopf, ob der normale Task-Manager auch die Threads anzeigt. Jeder Prozess hat mindestens einen Thread. Ob er mehr als einen hat, entscheidet der Programmierer. Den ersten Thread kriegt man frei Haus, alle weiteren muss man von Hand anlegen. Prozesse sind vom Betriebssystem verwaltete, sauber voneinander getrennte Abläufe mit jeweils eigenen Ressourcen, die sich gegenseitig nicht ins Handwerk pfuschen dürfen. Threads wiederum sind unterschiedliche Abläufe innerhalb von Prozessen (quasi Sub-Prozesse), die keine Isolation voneinander haben. Jeder Thread kann jedem anderen (im selben Prozess) in dessen Arbeit reinpfuschen und wenn einer den Prozess zum Absemmeln bringt, sind die anderen auch mit dran. Da muss sich der Programmierer selber darum kümmern, dass das nicht passiert. Dafür hat er mit weniger Bürokratie vom Betriebssystem zu kämpfen.
Wie es mit Prozessen ist, kannst du z.B. am Firefox sehen. Der nutzt seit einiger Zeit mehrere Prozesse. Das Problem, vor dem FF (und andere Software ebenso) steht, ist folgendes: Wenn alles in einem Prozess läuft, und irgendwo macht ein Plugin oder Addon Unsinn oder ein Tab hat einen Fehler, dann stürzt der ganze Prozess ab und alle offenen Fenster und Tabs sind weg. So war es in der Vergangenheit. Am besten wäre, wenn FF jede Seite, jeden Tab, jedes Fenster und evtl. sogar jedes Addon in einen eigenen Prozess auslagern würde. Dann könnten die abstürzen, ohne das dem Rest irgendwas passiert. So macht es AFAIK Chrome (und gilt deshalb als Speicherfresser, siehe folgenden Abschnitt). Logisch zu Ende gedacht führt das übrigens zur Idee der Mikrokernel, wo möglichst wenig im Kernel läuft und so viel wie möglich (Treiber, Dienste, Anwendungen etc.) in normale Userspace-Prozesse ausgelagert wird.
Dummerweise gibt es pro Prozess einen Mehraufwand (Overhead), wenn man das so macht. Jeder Prozess braucht seinen eigenen RAM, also ist der RAM schneller alle. Da die Prozesse voneinander isoliert sind (das ist ja gerade der Sinn), dürfen sie nur über spezielle Schnittstellen miteinander reden, also gibt es da auch Reibungsverluste, wenn was koordiniert werden muss. Die CPU hat mehr Aufwand damit, zwischen den Prozessen umzuschalten. Und so weiter, und so fort.
Aus Stabilitätsgründen will man also eigentlich alles in eigene Prozesse kapseln. Aus Performancegründen ist es besser, alles in einem einzigen Prozess zu bündeln. Firefox teilt das Kind in der Mitte und fährt einen Kompromiss: Je nach Leistungsfähigkeit des Systems und ein paar anderen magischen Würfeleien ermittelt er die für deinen Fall „optimale” Zahl an Prozessen und verteilt dann die anfallenden Arbeiten auf diese Instanzen.
Du kannst dir mal den Process Explorer von Sysinternals angucken. Der verrät einiges mehr als der Task-Manager von Windows (u.a. auch die Threads).
Übrigens, was bedeuten dann eig. die Handles im Task-Manager? Ist das noch mal eine Aufteilung der Threads?
Nö, das ist eigentlich eine andere Baustelle. Ein Handle ist ein vom OS abstrahierter Zugriffspunkt auf eine Ressource. Wenn ein Prozess zum Beispiel eine Datei öffnet, dann gibt Windows ihm einen Handle auf diese Datei. Und über diesen Handle kann der Prozess dann mit der Datei arbeiten (Lesen, Schreiben, Navigieren, etc). Handles können aber auch Speicher, Sockets oder Pipes referenzieren. Doch auch Threads werden über Handles gesteuert, und so gibt es dann doch wieder einen Bezug zu denen. Die Idee ist, die eigentlichen Speicheradressen hinter diesem abstrakten Dingsbums namens Handle zu verstecken, damit die Anwendung keinen Unfug damit anstellt. Unter der Haube ist das Handle eigentlich nur eine Nummer auf eine intern von Windows verwaltete Tabelle, in der es über die Zuordnungen und Berechtigungen von Ressourcen Buch führt.