dann zeige mal Deine Single-Thread-Workload ...
Hab ich doch: es handelt sich um den HeavyGate Benchmark. Unter Linux "yes" und das "stress" Tool.
erklär mir nicht das wäre fehlerhaft;
Ist es aber leider, was soll ich sagen... für dich kann ich ja schlecht die Fakten verdrehen...
Hohe Last soll man nie, nie, niemals im "GUI" Thread bzw. im interaktiven Thread zur Benutzer-Maschine-Kommunikation (main-Function) laufen lassen, aber genau das tust duUnd das ist der große Fehler, eigentlich lernt man das doch von Anfang an, bei einer GUI merkt man ja direkt das dann schlichtweg nichts mehr geht. Deine Shell dürfte aber auch recht träge werden, da sämtliche Last im "interaktiven User Thread" läuft. Da am Shell-Prozess ganz viel dran hängt, kann so ein Thread nicht gut gescheduled werden, somit ist schlichtweg dein Code fehlerhaft. Schau dir mal den Code von Linux "stress" an (https://people.seas.harvard.edu/~apw/stress/) den ich oben benutz habe, der hat einmal die main-function, macht aber für jede "100%-Last" einen eigenen Thread auf und wartet im main nur auf das terminieren der Child-Threads, die 100% Last erzeugen. Die main-function selbst erzeugt keine Last.
Es gibt auch einen "Windows-Port" hier (https://github.com/RichardKav/Stress-for-Windows), der erzeugt auch die Last in externen Threads.
Wenn du deine Last in einen externen Thread auslagerst und in der main-function wartest bis diese terminiert (natürlich nicht busy-waiting), dann sollte das klappen, kann das nachher mal selbst testen und deinen Code korrigieren. Aber die main-function für 100% Lasten zu missbrauchen ist nie gut.