Forum: PC-Programmierung Windows Prozesse mit gleicher Priorität


von max .. (vbc2011)


Lesenswert?

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
von Peter II (Gast)


Lesenswert?

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.

von max .. (vbc2011)


Lesenswert?

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).

von Peter II (Gast)


Lesenswert?

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.

von Sebastian H. (sebihepp)


Lesenswert?

Das liegt an der Festplatte, nicht an der CPU.

von Peter II (Gast)


Lesenswert?

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.

von Robert L. (lrlr)


Lesenswert?

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" ;-)

von Thomas E. (thomase)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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)

von Thomas E. (thomase)


Lesenswert?

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.

von max .. (vbc2011)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.