Threadzustände Linux vs. Windows

1535
Nickolouse

Linux hat: bereit, blockiert, läuft, wird beendet.

Windows hat: Bereit, Bereitschaft verzögert, Standby, Laufen, Warten, Beendet, Initialisiert.

Warum hat Windows so viele Zustände? Welchen Vorteil bietet diese zusätzliche Komplexität?

3
Dies ist eine Frage zu Windows, keine Frage zu Wissenschaft. Es mag eine wissenschaftliche Frage dahinterstehen (warum solche Zustände nützlich sind), doch müsste man wissen, wie diese Zustände verwendet werden. Gilles vor 8 Jahren 0
kurze antwort ... terminplanung. Da Windows mehr Status hat, kann es eine differenziertere Planung von Threads durchführen, je nachdem, ob sie zu einem bestimmten Zeitpunkt ausgeführt werden kann. Es hat keinen Sinn, einen Prozess in einer Wartezustandszeit anzugeben, genauso wie es keinen Sinn hat, einen Thread in einem initialisierten Zustand auszusetzen. Dies ist ein immens komplexes Thema, und es hat viele Diskussionen und Diskussionen darüber gegeben, wie Linux Thread-Scheduling durchführt (siehe die Con Kolivas-Kontroverse), was Ihnen einen gewissen Kontext geben kann. Der TLDR ist auf Lager Linux ist für Serverlasten optimiert und Windows ist für die Desktop-Reaktionsfähigkeit gedacht. Frank Thomas vor 8 Jahren 0
Vielen Dank für Ihre Antwort @FrankThomas. Ich habe heute über das Thema gelesen und brauchte eine Anleitung, warum sie sich für so viele Staaten entschieden haben. Nickolouse vor 8 Jahren 0

1 Antwort auf die Frage

2
Xtremity

Ein Laufender Thread ist der Thread, der derzeit auf einem Prozessor ausgeführt wird. Der Laufende Thread wird aus der Liste der Ready- Threads für diesen Prozessor ausgewählt. Dies sind Threads, die gut ausgeführt werden können, um ausgeführt zu werden. Der Standby- Thread ist der Ready- Thread, der derzeit ausgewählt ist, um als nächstes auf diesem Prozessor in den Status " Running" zu wechseln. Dies kann sich jedoch ändern, wenn ein Thread mit höherer Priorität bereit ist, bevor die Änderung vorgenommen wird.

Deferred Ready ist ein globaler Status, der angibt, dass der Thread auf jedem Prozessor ausgeführt werden kann. Dies kann beispielsweise für eine CPU verwendet werden, um einen Thread mit hoher Priorität auf einer anderen CPU einzuplanen.

Threads, die nicht betriebsbereit sind, werden durch den Grund bestimmt, aus dem sie nicht ausgeführt werden können:

  • Threads werden während der Erstellung in den Zustand Initialisiert versetzt .
  • Threads können auf ein Ereignis warten, z. B. Synchronisierung oder E / A-Abschluss, oder müssen warten, wenn sie auf Speicher zugreifen, der auf die Festplatte ausgelagert ist. Sobald das Ereignis signalisiert wurde oder das Timeout abgelaufen ist, kann der Thread erneut ausgeführt werden.
  • Threads werden in den Transition- Status versetzt, da der Kernel-Stack ausgelagert wurde. Diese Threads können erst ausgeführt werden, wenn ihr Kernel-Stack wieder verfügbar ist.
  • Fäden, die ausgetreten sind, werden in platziert Terminated - Zustand, bis das System gereinigt wird.

Es sollte beachtet werden, dass die Thread-Status vollständig von den Prioritäten für die Zeitplanung getrennt sind, die die Reihenfolge festlegen, in der die Threads zur Ausführung ausgewählt werden.