priority scheduling in Linux

ManuJo

Mitglied
Hallo liebe Leute,

in Linux gibt es ja den Befehl nice, mit welcher man die Priorität eines Programms definiert. Mit & Zeichen kann man zudem zwei Instanzen von dem
selben Programm starten. Gibt es eine Möglichkeit, zwei Instanzen von gleichem Programm mit verschiedener Priorität parallel zu starten?
Irgendetwas wie:
nice --20 x.java & java x & nice -10 x.java & java x
Ich möchte die Möglichkeit, ein zweite klasse mit dem selben Inhalt zu schreiben, vermeiden und nur mit einer Klasse arbeiten.
 
Die Problematik verstehe ich jetzt nicht ganz.

Wenn Du ein Programm hast (egal was - kann natürlich ein Java Programm sein), dann kannst Du dies mehrfach starten (so es keine Checks hat, die das verhindern. Klar, wenn es in die Prozessliste schaut und sich beendet, wenn es schon läuft, dann ist das etwas anderes ...)

Und wie Du geschrieben hast: Auf Linux kannst Du, so du nice installiert hast (coreutils / bsdutils sind die Pakete z.B. bei Debian / Ubuntu wenn ich mich nicht irre ...) jeden Aufruf mit einer beliebigen Priorität starten.

Der Aufruf sieht aber relativ komisch aus. Du willst ja sowas wie
nice -n -20 java x

Also um "niceness" -20 für Befehl "java x"

Das kannst Du natürlich mittels & im Hintergrund starten.
nice -n -20 java x &

Und das ginge dann auch mehrfach hintereinander also z.B.

nice -n 3 xterm & nice -n 1 xterm &

Und dann ein
ps -eo pid,ppid,ni,comm | grep xterm
zeigt dann die xterm prozesse mit nice level 3 und 1 ...

Somit: Ja, das geht.

Das nice --20 x.java
sieht nur dubios aus. Oder hast du ein executable x.java? Mit einem aktuellen Java wäre evtl
Das nice --20 java x.java
denkbar (Also direkte Ausführung der java Datei - unüblich aber ab Java 11 (oder so, bin mir da nicht ganz sicher, wann das eingebaut wurde) geht der Aufruf auf der Java Datei selbst ohne javac Aufruf....

Edit: das --20 braucht natürlich auch root Rechte. Sonst gibt es nur ein "nice: die Priorität kann nicht gesetzt werden: Keine Berechtigung" 🙂
 
Danke für die sehr umfangreiche Erklärung. Ich möchte ein java Programm parallel starten, mit unterschiedlichen Prioritären. Dabei wird das Programm in jeder Sekunde Zahlen ausgeben. Die Frage ist, ob ich die Prioritäten so setzen kann, dass das System einer Instanz mehr Priorität gibt als dem anderen.
Habe ich das richtig verstanden? Um mein Ziel zu erreichen, müsste ich doch das folgende schreiben:
Name von java Programm heisst xterm und muss sofort ausgeführt werden.
sudo nice -n --20 java xterm & nice -n -19 java xterm &
Damit die erste Instanz deutlich mehr Priorität(-20) bekommt als die zweite(19).
 
Also wenn xterm die Klasse ist, in der die main Methode ist und ein java xterm das Programm ausführt: ja, das könnte klappen...

Wobei das zweite Kommando auch ein sudo benötigt meine ich - also ggf. einfach erst ein
sudo su -
Um eine root shell zu haben und dann der Befehl ohne sudo ...

Und die Priorität ist nicht so unterschiedlich vermute ich und falls die Programme die CPU nicht auslasten (z.B. wegen Sleep im Code), dann wirst du keinen großen Unterschied sehen ...

Und bei mehreren Cores könnte ggf beide fast gleich ausgeführt werden ...

Aber das wirst du dann ja auch sehen ....
 

Zurück
Oben