Ich würde nicht sagen, dass das die Schuld von Windows ist.
Man kann einfach oft nicht eindeutig darstellen, wie jeder einzelne Core tatsächlich ausgelastet ist.
Wie HisN schon geschrieben hat, schiebt der Windows-Scheduler z.B. Threads oft sehr schnell zwischen verschiedenen Cores hin und her. So kann ein Thread, der auf einem Core 100% Last erzeugen würde, im Taskmanager zwei Cores zu 50% auslasten oder 3 zu 33% usw.
Das ist unter bestimmten Umständen durchaus ein wünschenswertes Verhalten, um die Ressouren der CPU optimal zu nutzen.
So richtig kompliziert wird es aber, wenn SMT/CMT ins Spiel kommt. Also Intels Hyperthreading oder AMDs Modulbauweise. In beiden Fällen erscheinen im Taskmanager 2 Cores, wo eigentlich keine zwei (ganzen) Cores vorhanden sind.
Wenn man z.B. eine CPU mit nur einem Core + HT hat, dann sieht man im TM einen Dualcore. Wenn man es hinbekommt, einen dieser dargestellten Cores mit 100% auszulasten und den anderen bei Null zu halten, hat man laut Anzeige 50% gesamte CPU-Last. Das ist aber natürlich Unsinn, denn HT verdoppelt die Leistung nicht. Wenn man HT durch zusätzliche Threads ebenfalls auslastet, kommt vielleicht nochmal 5-15% mehr CPU-Leistung zusammen. Mehr nicht.
Bei AMDs Bulldozer-CPUs sieht es ganz ähnlich aus. Da teilen sich jeweils zwei Cores untereinander gewisse Ressourcen, so dass die zwei Cores eines Moduls voll ausgelastet zusammen nicht 200% Leistung bringen, sondern z.B. nur 160%.
Aber wie will man das im Taskmanager sauber abbilden? Zwar weiß Windows inzwischen von HT und Co. und damit, wie viele "ganze" Cores eine CPU tatsächlich hat, aber das hilft nicht bei dem Problem, wie man die Auslastung dieser Cores plus der durch SMT/CMT hinzukommenden Einheiten korrekt darstellen kann.
Wirklich korrekt zeigt der Taskmanager die Situation also nur in zwei Zuständen an: Bei einer Last von 0% und einer von 100% über alle Cores.
Das ist verdammt schwer zu erklären. Ich hoffe, ich habe es halbwegs hinbekommen.
