Der Martin: Mehr gleichzeitige Prozesse als CPUs?

Beitrag lesen

Hallo Rolf,

danke erstmal für deine Denkanstöße.

In einem Multitasking-System hat ein Thread mehr Status als Run/Sleep.

Ja, richtig. In top gibt es noch die Status D (das korreliert etwa mit der GUI-Meldung "<application> is not responding") und Z für Zombie. Außerdem noch zwei Status, die auftreten können, wenn ein Debugger im Spiel ist.

Sleep heißt: Der Thread kann nicht laufen, weil er auf ein externes Signal wartet (z.B. Festplatten-IO, oder eine Message von einem Socket, einer Named Pipe, oder ein irgendwie geartetes anderes Event).

Richtig.

Running heißt: Er führt aktiv CPU-Instruktionen aus.

Dachte ich bis gestern auch.

Wenn TOP den Status der laufenden Threads bestimmt, dann ist er selbst im Status Running. Bei 4 Kernen können also nur 3 andere Threads auf "Running" stehen, bei 2 Kernen nur ein einziger anderer.

Ja, und auch das ist eigenartig, weil top alle drei Sekunden (Default) eine Momentaufnahme macht und top selbst oft gar nicht unter den als "Running" markierten Prozessen ist.
EDIT: Ich habe das jetzt mal ein paar Minuten beobachtet und komme zu der Erkenntnis, dass das ein Irrtum ist. Bei jeder Aktualisierung der Anzeige war top dabei.

Es gibt aber auch noch "Ready". Das sind die Threads, die gerne was tun würden, aber nicht können, weil der Scheduler meint, andere Threads wären gerade wichtiger. Und "Ready" können deutlich mehr Threads sein, als es Cores gibt.

Ja. In den man-Pages zu top habe ich mittlerweile einen unauffälligen, aber wichtigen Hinweis gefunden: Der Status R bedeutet in Wirklichkeit Ready. Dann wäre es aber wiederum erstaunlich, dass es immer nur so wenige sind ...

Und die Bezeichnung "running" auch im Kopfbereich der Anzeige von top ist dann irreführend.

Live long and pros healthy,
 Martin

--
Für welches Tier mühen wir uns am meisten ab? - Für die Katz'.