Java Thread Scheduling Jin Zhou Proseminar Java Thread Scheduling November 2000.
-
Upload
wiebke-langer -
Category
Documents
-
view
119 -
download
0
Transcript of Java Thread Scheduling Jin Zhou Proseminar Java Thread Scheduling November 2000.
Java Thread Scheduling
Jin Zhou
Proseminar
Java Thread SchedulingNovember 2000
Der Inhalt:
•Ein Übersicht über Java Scheduling
•Wann ist Scheduling wichtig
•Scheduling mit Thread Prioritäten
Java Thread SchedulingNovember 2000
Java Thread SchedulingNovember 2000
Ein Übersicht über Java SchedulingDas erste Beispiel:class TestThread extends Thread{
String id;public TestThread (String s){
id = s;}public void doCalc(int i){}public void run(){for(int i = 0; i < 10; i ++){
doCalc(i);System.out.println(id);}
}}
TestThread.java
Java Thread SchedulingNovember 2000
Ein Übersicht über Java SchedulingTest.java public class Test{
public static void main(String args[]){TestThread t1,t2,t3;t1 = new TestThread (“Thread 1”);t1.start();t2 = new TestThread (“Thread 2”);t2.start();t3 = new TestThread (“Thread 3”);t3.start();
}}
Ein Übersicht über Java Scheduling
Java Thread SchedulingNovember 2000
Der jetzige Ausdruck:
Thread1...
Thread1Thread2
...Thread2Thread3
...Thread3
Aber wir wollen z.B.:
Thread1Thread2Thread2Thread3Thread1Thread2Thread3Thread3
…
Java Thread SchedulingNovember 2000
Ein Übersicht über Java SchedulingDie vier Zuständen von Threads
• Initial• Runnable(currently running thread)• Blocked• Exiting
Java Thread SchedulingNovember 2000
Ein Übersicht über Java Scheduling
Priorität von Thread:
•Jeder Thread im Java-Programm hat eine Priorität, die durch eine positive Ganzzahl dargestellt wird.
•Der momentan laufende Thread hat die höchste Priorität von allen Threads ,die runnable sind. (a priority-based scheduler)
Java Thread Scheduling
November 2000
Ein Übersicht über Java SchedulingScheduling Beispiel: Threads mit verschidenen Prioritäten
public class SchedulingExample implements Runnable{public static void main(String args[]){
Thread calcThread = new Thread(this); calcThread.setPriority(4); calcThread.start();AsyncReadSocket reader = new AsyncReadSocke
t( new Socket(host, port));
reader. setPriority(6); reader.start();}
public void run(){doCalc();
}}
Java Thread Scheduling
November 2000
Ein Übersicht über Java Scheduling
Th
read
s
Default(5)
calcThread(4)
Reader(6)
KEY
Currently Running Thread
Waiting for CPU
Blocked
T1 T2 T6
T3 T4 T5
Time
Java Thread SchedulingNovember 2000
Ein Übersicht über Java Scheduling Scheduling Threads mit gleicher Priorität
Th
read
s
Default(5)
calcThread (5)
Reader(6)
KEY
Currently Running Thread
Waiting for CPU
Blocked
T2 T3
T7
T4 T5 T6
Time
Java Thread SchedulingNovember 2000
Ein Übersicht über Java Scheduling
T2: Priorität 5: Default -> calcThread -> NullPriorität 6: Null Blocked: Null
Priorität 5: calcThread -> Default -> NullPriorität 6: reader -> Null Blocked: Null
Priorität 5: calcThread -> Default -> NullPriorität 6: Null Blocked: reader -> Null
T3:
T4:
Scheduling Threads mit gleicher Priorität
Ein Übersicht über Java SchedulingPriorität Inversion
Thread 2 Thread 8
synchronized
Java Thread SchedulingNovember 2000
T1: Priorität 2: Thread 2 -> NullPriorität 8: Null Blocked: Thread 8
T2: Priorität 2: Thread 2 -> NullPriorität 8: Null Blocked: Thread 8
Ein Übersicht über Java SchedulingPriorität Vererbung
Thread 2 Thread 8 Thread 5
synchronized
Java Thread SchedulingNovember 2000
T1: Priorität 2: Thread 2 -> NullPriorität 5: NullPriorität 8: Null Blocked: Thread 5 -> Thread 8 -> Null
Ein Übersicht über Java Scheduling
Java Thread SchedulingNovember 2000
Priorität 2: Thread 2 -> NullPriorität 5: Thread 5 -> NullPriorität 8: Null Blocked: Thread 8 -> Null
T2: Priorität 2: NullPriorität 5: Thread 5 -> NullPriorität 8: Thread 2 -> Null Blocked: Thread 8 -> Null
T3:
Priorität 2: Thread 2 -> NullPriorität 5: Thread 5 -> NullPriorität 8: Thread 8 -> Null Blocked: Null
T4:
Ein Übersicht über Java SchedulingRound-Robin Scheduling • Auf der Maschine mit Round-Robin
Scheduling läuft ein Thread nur für eine gewisse Zeitspanne. Und wird dann zum Ende der Prioritätliste angefügt.
• Auf der Maschine ohne Round-Robin Scheduling läuft der currently running thread immer, bis er blockiert wird oder ein Thread mit höherer Priorität ausführbar wird.
Java Thread SchedulingNovember 2000
Java Thread SchedulingNovember 2000
Wann ist Scheduling wichtigWann interessieren wir uns für das Scheduling?Nur wenn folgende erfüllt sind:
•Es gibt ein oder mehr CPU-intensive Threads in einem Programm
und entweder •Zwischenergebnisse der Kalkulationen sind
interessantoder•Die Threads führen keine gemeinschaftliche
Aufgabe durch.
Wann ist Scheduling wichtig
Java Thread SchedulingNovember 2000
Threads 1 Threads nThreads 2 ……
Beispiel:
(Priorität 5)
Applet
Programm
Button
Fenster
(Priorität 6)
Java Thread SchedulingNovember 2000
Round-Robin Scheduling und „ Gerechtichkeit“ 1. Zwischenergebnisse wichtig:
das Round-Robin Scheduling am gerechtesten.
2. Endergebnisse wichtig: das Round-Robin Scheduling auf der
Maschine mit einer CPU nicht am besten.3. Auf Maschinen mit mehreren CPUs : das Round-Robin Scheduling ist oft besser
als anderes Scheduling.
Wann ist Scheduling wichtig
Java Thread SchedulingNovember 2000
Beispiel zu “Gerechtichkeit” (Maschine mit einer CPU)
CalcServer
Client 1 Client 2 Client 3 Client 4 Client 5
Je 5 Sekunden
Wann ist Scheduling wichtig
Wann ist Scheduling wichtig
Ohne Round-Robin Scheduling:
CalcServer
Client 1 Client 2 Client 3 Client 4 Client 5
5 s 10 s 15 s 20 s 25 s
Insgesamt 25 Sekunden
Java Thread SchedulingNovember 2000
Wann ist Scheduling wichtig
Mit Round-Robin Scheduling: (die Zeitspannung ist 2.5s)
CalcServer
Client 1 Client 2 Client 3 Client 4 Client 5
2.5 s 5 s 7.5 s 10 s 12.5 s
Insgesamt 25 Sekunden
Java Thread SchedulingNovember 2000
15 s 17.5 s 20 s 22.5 s 25 s
Java Thread SchedulingNovember 2000
Beispiel zu “Gerechtichkeit” (Mehr-CPU-Maschine)
CalcServer 1
Client 1 Client 2 Client 3 Client 4 Client 5
Je 5 Sekunden
CalcServer 3
CalcServer 2
CalcServer 4
Wann ist Scheduling wichtig
CalcServer 1
Client 1 Client 2 Client 3 Client 4 Client 5
CalcServer 3
CalcServer 2
Wann ist Scheduling wichtig
Ohne Round-Robin Scheduling:
CalcServer 4
5 s 5 s5 s5 s 10 s
Insgesamt 10 Sekunden
CalcServer 1
Client 1 Client 2 Client 3 Client 4 Client 5
CalcServer 3
CalcServer 2
Wann ist Scheduling wichtig
Mit Round-Robin Scheduling:
CalcServer 4
5 s 5 s5 s5 s
Insgesamt 6.2 Sekunden
Scheduling mit Thread Prioritäten
Java Thread SchedulingNovember 2000
Prioritäten in der Java API 3 Konstanten (static final) :•Thread.MIN_PRIORITY=1:
Die kleinste Priorität, die ein Thread haben kann.•Thread.MAX_PRIORITY=10:
Die größte Priorität, die ein Thread haben kann.•Thread.NORM_PRIORITY=5:
Die Standartriorität. 2 wichtige Methoden•void setPriority(int priority) :
Setzen der Priorität des gegebenen Threads.•int getPriority(int priority) :
Lesen der Priorität des gegebenen Threads.
Scheduling mit Thread Prioritäten
Java Thread SchedulingNovember 2000
• Benutzen der Priorität-API z.B.:
…… Thread current = Thread.currentThread(); Thread calcThread = new Thread(this); calcThread.setPriority(current.getPriority() –1); calcThread.start();……
Zusammenfassung1. Ein Übersicht über Java Scheduling
•Priorität von Thread
•Scheduling Threads mit gleicher Priorität
•Priorität Inversion und Vererbung
•Round-Robin Scheduling 2. Wenn Scheduling ist wichtig
•Wann interessieren wir uns für das Scheduling•Round-Robin Scheduling und „Gerechtichkeit“
3. Scheduling mit Thread Prioritäten•Priorität in der Java API
•Benutzung der Priority-API Java Thread Scheduling
November 2000