warum keine 100%tige CPU auslastung??
-
danke für die zahlreichen antworten werde das morgen mal versuchen

aber ich glaube nicht das es an printf liegt, da dass in meinem anderen programm auch verwendet wird
und in dem oben genannten beispiel machen alle threads die gleiche berechnung -> sie sollen aber verschiedene machen (arbeitsteilung)
-
Teste es nochmal mit irgendwas was kein printf macht.
Und übergib gültige Zeiger für die Thread-ID, nicht den Mist den du jetzt machst.
-
Elektronix schrieb:
Warum willst Du denn unbedingt so viel CPU-Kapzität verbraten. Schließlich braucht das Betriebssystem auch noch einige Reserven, um seine Aufgaben zu erledigen.
So lange die Threads / der Prozess Rechenzeit abgibt, wenn andere Prozesse sie brauchen, ist das kein Problem. Ich meine du schleichst ja auch nicht mit deinem Auto mit 30 über die Autobahn, obwohl es 140 schafft. Also ich habe meine CPU zum Rechnen gekauft und nicht zum Schlafen.

-
@Luckie:
Du fährst aber nicht mit deinem Auto stundenlang mit 140km/h im Kreis, oder?
-
Ne, da fliegt er außer Kurve

-
Kuma schrieb:
aber ich glaube nicht das es an printf liegt, da dass in meinem anderen programm auch verwendet wird
Na und! Was hat die Aussage, dass Du es woanders verwendest mit dem Problem hier zu tun.
Jochen hat recht.
Es gibt in der CRT speziell eben auch bei der Ausgabe auf stdout eine Synchronisation, wenn Du das so machst. Dadurch warten mehr oder weniger eben ein Thread auf den anderen, weil eben nur ein Thread jeweils zu einer Zeit auf stdout schreiben kann.Nimm mal die printf's raus und ersetze sie durch eine log oder sonst was rechenintensives und Du wirst Deine 100% Last bekommen...
-
Na geh, Martin. Es reicht doch wenn wir anderen uns alle sicher sind dass es an printf liegt, ER muss das doch deswegen nicht glauben

Nimm mal die printf's raus und ersetze sie durch eine log oder sonst was rechenintensives und Du wirst Deine 100% Last bekommen...
Nicht wenn das "log" über printf implementiert ist

p.S.: Ich weiss seit heute z.B. auch dass ein ::CreateDirectory() in einer Endlosschleife auf einem Dual Core bloss einen Core voll auslastet. Hihi. Nicht dass ich es ausprobieren wollte...

(Zumindest unter Win2003 auf nem VMware ESX Server)
-
p.S.: Ich weiss seit heute z.B. auch dass ein ::CreateDirectory() in einer Endlosschleife auf einem Dual Core bloss einen Core voll auslastet. Hihi. Nicht dass ich es ausprobieren wollte...
Eigentlich blöd, einer könnte ja schonmal mit Create anfangen, während der andere noch das Directory sucht

-
Jo. Ich meinte natürlich wenn in 2 oder mehr Threads solche CreateDirectory Endlosschleifen laufen (auf einen Pfad wo die Berechtigungen fehlen, also es werden im Endeffekt garkeine Verzeichnisse angelegt). Und was mich dabei verwundert hat ist dass da eben trotzdem die Auslastung nicht auf 100% geht.
Eine Single-Core Maschine ist auf jeden Fall komplett "dicht" sobald da bloss ein solcher Thread läuft, da braucht es schonmal ein paar Minuten bis man bloss den Task-Manager offen hat.
Auf einer Dual Core Maschine geht die CPU Last nicht höher als 50%, und man kann normal weiter arbeiten als ob garnix wäre.
-
Achso!
Der Zugriff wird wahrscheinlich exklusiv durchgeführt (über CS/Mutex) gelockt, so daß sich sowieso immer nur ein thread damit beschäftigen darf.
Weiterhin sind die notwendigen Plattenzugriffe evtl. asynchron und erzeugen keine CPU - Last - nach ein paar iterationen solltest das aber alles in Cache liegen.
Das kann sich aber auch je nach Hardware und OS unterscheiden.
-
Jo irgendwo wird das serialisiert.
Ist ja nicht so dass ich es mir nicht erklären könnte, hat nur irgendwie zum Thema gepasst, und da ich das kürzlich erst beobachten konnte ...
-
hat nur irgendwie zum Thema gepasst, und da ich das kürzlich erst beobachten konnte
Recht so! Hab' schön geschmunzelt
