Hallo, ich habe 3 Prozesse (EXE) mit gleicher Priorität unter WinXP dauernd laufen. Die Prozesse können sich in ihrem zeitlichen Ablauf verschieben - d.h. es kann vorkommen - dass alle 3 Prozesse "gleichzeitig" ablaufen. U.a. erzeugt jeder der 3 Prozesse Dateien und Grafiken - was zu einer hohen Systemauslastung (100%) führt. Ein Timelogging an verschiedenen Stellen der Programme hat mir gezeitgt - das die Prozesse teilweise freezen! Nun meine Frage: Können sich die Prozesse (wegen der gleichen Prio) gegenseitig blockieren - wenn z.B. alle 3 Prozesse gerade eine Datei (Größe 5MB) speichern ? Gruss
:
Verschoben durch User
max .. schrieb: > Können sich die Prozesse (wegen der gleichen Prio) gegenseitig > blockieren - wenn z.B. alle 3 Prozesse gerade eine Datei (Größe 5MB) > speichern ? ja. Es ist ja nicht so das dein Programm 10% CPU braucht. Es ist das es eine Zeitlang 100% braucht und dann 0%. Wenn du nur eine CPU hast, dann kann in der 100% zeit auch nicht anderes laufen. Das ganze passiert zwar im Millisekunden bereich, aber du hast du ja nicht geschrieben ab wann es bei dir ein Freeze ist.
ok. nun ja - als Freeze bezeichne ich einfach den Fall - wenn z.B. ein herkömmlicher Sleep(10) - statt 10 ms, 50 ms dauert (dies bestimme ich mit der TimeGetTime()-Funktion, da diese genauer ist und die absolute Zeit liefert). Ein Freeze kann bis zu 130 ms dauern - bei einem Sleep(10).
ich würde sagen das ist normal, denn wenn deine CPU noch andere prozesse bedient kann kann es schon mal ein paar ms länger dauer. Die 130ms kommen mir aber schon recht viel vor.
Sebastian Hepp schrieb: > Das liegt an der Festplatte, nicht an der CPU. warum sollte die Festplatte auswirkungen auf Sleep(10) haben? Es ist genau andersrum. Wenn ein Prozess auf die Festplatte wartet dann kann der andere Prozess die CPU nutzen.
also ich habe/hatte subjektiv auch immer das gefühl, dass, wenn eine applikation die Festplatte "überstrapaziert" andere prozesse (die überhaupt nix mit Festplatte machen) auch sehr ins stocken kommen.. vorallem wenn, (wie in diesem fall) eine "große" datei (5MByte) geschrieben wird... dank multicore und ssd ist das ja aber inzwischen "geschichte" ;-)
Peter II schrieb: > warum sollte die Festplatte auswirkungen auf Sleep(10) haben? Weil der Zugriff auf die Festplatte eine höhere Priorität hat. Dieser erfolgt nicht mit der Priorität des Anwendungsprogrammes (User mode) sondern wird ans OS übergeben und erfolgt mit höherer Priorität(Kernel mode). Und dann müssen alle anderen warten. mfg.
Thomas Eckmann schrieb: >> warum sollte die Festplatte auswirkungen auf Sleep(10) haben? > Weil der Zugriff auf die Festplatte eine höhere Priorität hat. Dieser > erfolgt nicht mit der Priorität des Anwendungsprogrammes (User) sondern > wird ans OS übergeben und erfolgt mit höherer Priorität(System). Und > dann müssen alle anderen warten. nein, der IO Request hat zwar eine höhere Prio aber er ist Asynchron, wenn er auf den Antwort warten wir der Prozess blockiert. Aber das hat keine Auswirkung auf anderen Anwendungen. Sonst würde ja nicht auf dem REchner mehr gehen wenn eine Anwenung eine große Datenmenge auf die Festplatte schreibt. (Das ganze gilt nur für den DMA-Modus, im PIO modus der Festplatte muss die CPU aktiv auf die Daten warten)
Peter II schrieb: > nein, der IO Request hat zwar eine höhere Prio aber er ist Asynchron, > wenn er auf den Antwort warten wir der Prozess blockiert. Aber das hat > keine Auswirkung auf anderen Anwendungen. Asynchron bedeutet nicht, daß die CPU nichts damit zu tun. Wenn der Prozess seinen Callback macht, ist die CPU mit dem beschäftigt. Sie dreht sich natürlich nicht auf der Stelle und wartet darauf, sondern gibt während dessen die Resourcen frei. Peter II schrieb: > Sonst würde ja nicht auf dem > REchner mehr gehen wenn eine Anwenung eine große Datenmenge auf die > Festplatte schreibt. Das Ganze verlangsamt sich ja auch. Nur ist zwischendurch meistens noch genug Zeit, daß man das als Benutzer nicht negativ bemerkt. Wenn aber mehrere Prozesse auf die gleiche Resource zugreifen, fällt das schon auf. Da nützt es auch nichts, wenn man 8 CPUs in seinem Rechner hat. Weil nämlich nur eine Festplatte da ist. Und auf die wird gewartet. mfg.
Also die 3 Prozesse sind auf 2 CPUs verteilt! (mehr gibts leider nicht). Man sieht auch deutlich im Tskmgr - auf welcher CPU gerade 2 und auf welcher nur ein Prozess laufen.
Du hast nicht zufällig ein AMD Athlon system? Dort gibt es einen Bug jeden CPU hat ihren eigenen Timer, dieser laufen aber nicht synchron. dann kann es durchaus passieren, das man sogar negative Zeiten stopt. (ende liegt vor dem start). Dafür gibt es aber ein Dualcore optimierer von AMD.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.