• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Rechenleistung kontrollieren

deetee

Newbie
Hallo,

also mal angenommen ich führe eine Schleife aus, die ständig prüft, ob eine bestimmte Datei verfügbar ist und er dann wird die Schleife abgebrochen.

Wie kann ich nun sicherstellen, dass die Rechenleistung z.B. unter 5% bleibt?

Geht das mit sleep() oder wie macht man sowas?
 
Also ich weiß net wie das unter Linux ausschaut aber mit sleepwrde sowas bestimmt schonmal gehen, weil du den Prozess deines Programms dann ja 'schlafen' legst für ne gewisse Dauer. Aber ob ma dafür ne extra Klasse bzw. Funkton hat um die Prozessorlastung zu regulieren weiß ich leider net.


Aber mit sleep sollte man es machen können.


Grüße Jenna
 
OP
D

deetee

Newbie
vielen dank mal jenna (netter name übrigens...)

Ich denke auch, dass es mit sleep auf jedenfall klappen müsste die Rechenleistung zu kontrollieren, aber evtl.. geht das auch etwas eleganter?
 
A

Anonymous

Gast
deetee schrieb:
ich führe eine Schleife aus, die ständig prüft, ob eine bestimmte Datei verfügbar ist und er dann wird die Schleife abgebrochen.

Leider geht aus deinen Ausführungen nicht hervor, ob die Datei schon existiert und von mehreren Programmteilen abwechelnd bearbeitet werden soll, oder ob du wirklich wartest bis eine bestimmte neue Datei vorhanden und geschlossen ist.
Im 2 Fall ist wohl wirklich ein sleep günstig. Für den erstenen Fall bietet die Interprozesskommunikation sogenannte Semaphore an, damit kann ein Prozess ohne CPU-Last auf den Zugriff auf eine File oder Device warten und zwischen Prozessen oder Programmteilen der Zugriff auf diese Datei wechselseitig freigegeben oder verriegelt werden, ein nicht gerade leichtes Thema, dazu müsstest du wohl in einem Programmier Lehrbuch etwas rumblättern.
Eine andere Möglichkeit währe eine Syncronisation mitteln einer Pipe. Das müsste man im einzelnen genau an der Aufgabenstellung herausfinden, welche Möglichkeit günstig zu programmieren ist.
Allgemein ist zu sagen man verhindert unter LINUX eine Blockade der CPU durch einen einzelnen Prozess, indem man die Prozesspriorität niedrig einstellt, dass andere Prozesse genügend CPU-Rechenzeit bekommen, wenn sie sie anfordern. Das geht mit Funktionen wie zB. nice() und mit setpriority() .

robi
 
OP
D

deetee

Newbie
Semaphoren, MQs und SM lerne ich gerade, und im Grunde geht es mir um beide Fälle.

Das Problem der Rechenleistung ist also unter Verwendung der IPC Methoden nicht gravierend, ja?

Und ansonsten ist sleep günstig?

Kann man mit nice() und setpriority() tatsächlich sicherstellen, dass ein Prozess nciht mehr als 5% der CPU einnimmt?
Ich verstehe die Funktionen eher so, dass sie kontrollieren, wie oft der Prozess Vorrang vor anderen bekommt. Aber nicht wie lange er dann arbeitet. Oder?
 
A

Anonymous

Gast
deetee schrieb:
Das Problem der Rechenleistung ist also unter Verwendung der IPC Methoden nicht gravierend, ja?
Der Prozess verhält sich ähnlich dem Sleepmodus und gibt dei CPU sofort wieder dem scheduler zurück, solange der Prozess wartet.
Und ansonsten ist sleep günstig?
Wenn keine andere Syncronisation möglich dann ja. Allerdings wird dadurch die Reaktionszeit des Prozesses auf die Sleepzeit gebremst.
Kann man mit nice() und setpriority() tatsächlich sicherstellen, dass ein Prozess nciht mehr als 5% der CPU einnimmt?
nein, aber es wird sichergestellt, das wenn andere Prozesse CPU anfordern diese genügend CPU-Zeit erhalten, und wenn der Rechner eh nur so vor sich hin döst, dann bekommt der Prozess trotz niedriger Priorität trotzdem soviel CPU wie er haben will, aber eben nur dann.

Es gibt noch eine weitere Möglichkeit, den Prozess komplett anhalten und dann wieder durch ein Signal zB SIGALRM oder SIGCONT oder SIGUSR1/2 von einem anderem Prozess aus wieder zu wecken. Das würde sich für wahrscheinlich sehr lange Wartezeiten eignen, oder auch zum Wecken aus dem Sleepmodus.

robi
 
Oben