Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java Threads Scheduling Lei Chen November 2000 Proseminar.

Ähnliche Präsentationen


Präsentation zum Thema: "Java Threads Scheduling Lei Chen November 2000 Proseminar."—  Präsentation transkript:

1 Java Threads Scheduling Lei Chen November 2000 Proseminar

2 Jave Thread Scheduling Popular--Scheduling Implementierung Native--Scheduling Unterst ü tzung Andere Thread--Scheduling Methoden Zusammenfassung

3 Teil I Popular-Scheduling Implementierung

4 1.Green Threads Was ist ein Green-Threads-Modell Green Threads sind Benutzer-Ebene-Threads Jeder Zeit darf einen einzigen Thread ausf ü hren Green-Threads-Scheduling Wann wechselt die virtuelle Maschine den laufenden Thread? F ü r Implementierung von Green-Threads wird empfohlen, Priorit ä t Vererbung zu benutzen Was wird passieren, wenn ein Thread eine Datei von einem leeren Socket lesen will? Realisierung im Betriebssystem mit „ asynchonous I/O “ Realisierung im Betriebssystem ohne „ asynchonous I/O “ Ein Beispiel f ü r blockierten Thread Popular--Scheduling Implementierung

5 Was ist ein Green-Threads Modell Processor Betriebssystem(BS) JVM BS-Thread Java-Thread Stack Programm z ä hler Bookkeeping Info. … … Stack Programm z ä hler Bookkeeping Info. JVM: Java Virtuelle Maschine

6 Threads auf Benutzer- und System- Ebene Threads Meisten Betriebssysteme haben zwei logische Teile: System-Ebene und Benutzer-Ebene Was ist ein Systemaufruf Ein Systemaufruf Beispiel Vor- und Nachteil von dieser logischen Teilung Vorteil: Schutz von Benutzerfehler Nachteil: Aufruf des Betriebssystems Popular — Scheduling Implementierung

7 Ein Systemaufruf Beispiel Ein Programm Der Kern des Betriebssystem Datei Benutzer Ebene System Ebene Systemaufru f lesen Popular — Scheduling Implementierung

8 Benutzer-Ebene und System-Ebene Betriebssystem Benutzer-EbeneSystem-Ebene BS-Threads verwaltet ohne Systemaufrufe BS-Thread werden im BS-Kern verwaltet Beispiele Popular — Scheduling Implementierung

9 BS-Threads auf Benutzerebene JVM Der Kern des Betriebssystem Datei Benutzerebene Systemebene lesen Popular — Scheduling Implementierung BS-Bibliotheken Anwendungsebene BS-Ebene

10 public class LockTest { object someObject=new Object( ); class ThreadA extends Thread { ThreadA( ) { setPriority(Thread.Max_PRIORITY);} // mit Priorit ä t 10; public void run( ) { synchronized(someObject) { wait( );} someObject.methodA( ); } Popular--Scheduling Implementierung Ein Implementierungsbeispiel von green-Threads-Scheduling

11 class ThreadB extends Thread { ThreadB( ) { setPriority(Thread.NORM_PRIORITY( ); } // mit Priorit ä t 5; public void run( ) { synchronized(someObject) { someObject.notify( );} someObject.methodB( ); } static void main(String args[ ] ) { new ThreadA( ).start( ); new ThreadB( ).start( ); } Popular--Scheduling Implementierung

12 2.Windows-Native-Threads F ü r jeden Java-Thread gibt es einen entsprechenden Thread vom Betriebssystem Jeder Windows-Native-Thread kann als ein Proze ß angesehen werden Verschiedene Implementierung der Java Virtuelle Maschine auf den Windows Plattformen Schwierigkeit der Windows native Threads Implementierung Viele Threads d ü rfen gleichzeitig in vielen CPUs ausf ü hren Popular--Scheduling Implementierung

13 Windows-Native-Threads (2) Windows-Native-Threads Scheduling Abbildungstabelle von Java-Thread Priort ä ten auf Win32- Plattform 7 Windows Threads Priorit ä ten f ü r 11 Java Threads Priorit ä ten 5 Scheduling Klassen f ü r 7 Windows Threads Priorit ä ten Andere wichtige Faktoren, die Thread-Priorit ä t affektieren Priorit ä t Vererbung Timeslice: Jeder Thread mit der gleichen Priorit ä t kriegt ungef ä hr gleiche CPU Zeit Priorit ä t Hochschieben Popular--Scheduling Implementierung

14 Abbildungstabelle von Java-Thread Priortäten auf Betriebssystem(Win32- Plattform ) Java-Priorit ä tWindows 95/NT Priorit ä t 0THREAD_PRIORITY-IDLE 1 (Thread.MIN_PRIORITY)THREAD_PRIORITY-LOWEST 2 3THREAD_PRIORITY-BELOW_NORMAL 4 5 (Thread.NORM_PRIORITY)THREAD_PRIORITY-NORMAL 6THREAD_PRIORITY-ABOVE_NORMAL 7 8THREAD_PRIORITY-HIGHEST 9 10 (Thread.MAX_PRIORITY)THREAD_PRIORITY-TIME-CRITICAL Popular--Scheduling Implementierung

15 3.Solaris-Native-Threads Es ist ein Zwei-Ebenen-Modell: Benutzerebene-Threads-Modell: dem Betriebssystemkern unbekannt System-Ebene-Threads (LWPs, lightweight processes) : dem Betriebssystemkern bekannt Viele Threads in vielen CPUs d ü rfen gleichzeitig ausf ü hren Scheduling-Implementierung des Solaris-Native-Threads Das Betriebssystem g í bt jedem LWP einen timeslice Die Wirkung des timeslice(4 Beispiele) wieviele LWPs(Lightweight-Process) hat die virtual Maschine? Die virtuelle Maschine beginnt immer mit einem LWP Wenn das LWP blockiert ist, und es noch wartende Threads gibt, dann wird das Betriebssystem ein neues LWP erzeugen [LWPs]=[gleichzeitige blockierte Threads] +1 Mit der Methode thr_setconcurrency() k ö nnen wir mehre LWPs erzeugen Popular--Scheduling Implementierung

16 Solaris-Native-Threads Modell Processor JVM Solaris Thread Solaris Thread Java Thread Java Thread … … JVM: Java Virtuelle Maschine Processor … LWP AnwendungBSBS-Kern … Priority-based Not timesliced timesliced

17 Die Wirkung der timeslice in Solaris-Native-Threads-Modell LWP1LWP2 Solaris-Thread1 mit Priorit ä t 5 LWP: lightweight processes Beispiel1 System-Ebene Solaris-Thread2 mit Priorit ä t 5 Solaris-Thread3 mit Priorit ä t 5

18 Die Wirkung der timeslice in Solaris-Native-Threads-Modell LWP1LWP2 LWP: lightweight processes Beispiel2 System-Ebene Solaris-Thread1 mit Priorit ä t 5 Solaris-Thread2 mit Priorit ä t 6 Solaris-Thread3 mit Priorit ä t 4

19 Teil 2 Native-Scheduling- Unterst ü tzung

20 Anbindung von Native Scheduling in Java Realisierung durch Klasse CPUSupport Implementeriungen f ü r Solaris und Windows Native-Scheduling-Unterst ü tzung Die Unterst ü tzung von native scheduling

21 Class CPUSupport public class CPUSupport{ static boolean loaded = false; static void CPUSupport{ try { System.loadLibrary(„CPUSupportWin“); loaded = true;} catch (Error e) { try { System.loadLibrary(„CPUSupportSolaris“); loaded = true; } catch (Error e) { System.err.println(„Warning: No platform library for CPUSupport“); } } Native-Scheduling-Unterst ü tzung

22 private static native int getConcurrencyN( ); public static int getConcurrency ( ) { if (!loaded) //Assume green threads return 1; return getConcurrencyN( ); } private static native void setConcurrencyN(int i ); public static void setConcurrency (int n ) { if (loaded) setConcurrencyN(n ); }

23 private static native int getNumProcessorsN( ); public static int getNumProcessors ( ) { if (!loaded)//Assume green threads return 1; return getNumProcessorsN( ); } getConcurrencyN, setConcurrencyN, getNumProcessorsN werden auf die entsprechenden Betriebssystemroutinen thr_getConcurrency, thr_setConcurrency und sysconf(_SC_NPROCESSORES_ONLN) von Solaris abgebildet.

24 Teil III Andere Thread-Scheduling Methoden

25 Eine Ü bersicht ü ber andere Thread-scheduling Methoden Die Methode suspend() und resume() void suspend() (nicht von Java2 unterst ü tzt):Verhindern ein Thread am unendlichen Laufen void resume() (nicht von Java2 unterst ü tzt):Erlauben einem Thread nach suspend wieder zu laufen Der suspended Zustand ist nicht gleich dem blockierten Zustand Eine Anwendung mit den Methoden suspend() und resume() Andere Thread-Scheduling Methoden

26 Eine Anwendung mit den Methoden suspend() und resume() import java.applet.Applet; import java.awt.*; public class Fractal extends Applet implements Runnable{ Thread t; public void start() { if (t==null){ t=new Thread(this); t.setPriority(Thread.currentThread().getPriority()-1); t.start(); } else t.resume(); }

27 public void stop() { t.suspend(); } public void run() { // Do calculations, occadionally calling repaint() } public void paint (Graphics g) { // Paint the completed sections if the fractal } Eine Anwendung mit den Methoden suspend() und resume()

28 Die Methode yield() Die Methode yield() erlaubt anderem Thread mit gleicher Priorit ä t zu laufen (Verzichtet auf CPU) Eine static Methode, beeinflusst nur den momentan laufenden Thread (ein Beispiel) Die Unterschied zwischen den Methode yield() und Methode suspend() Nach der yield() Methode bleibt der Thread original runnable Zustand, nicht wie bei der die suspend() Methode: der Thread ver ä ndert sich in einem suspend Zustand Was passiert, wenn yield() ausgef ü hrt wird? Es kann ein anderer Thread mit gleicher Priorit ä t ausgef ü hrt werden. Wenn es keinen Thread in Wartliste gibt, wird der Thread fortgesetzt. Andere Thread-Scheduling Methoden

29 Ein Beispiel mit der Methode yield() public class YieldApplet extends Applet implements Runnable{ Thread t; public void init() { t=new Thread(this); } public void paint (Graphics g){ t.yield(); } Andere Thread-Scheduling Methoden

30 Wie realisiert die Methode yield() Thread1 (pri. 5) Thread2 (pri. 5) Thread n (pri. 5) Thread1 (pri. 5) static void yield() currently running Thread Warteliste mit gleicher Priorit ä t... Andere Thread-Scheduling Methoden

31 Die Methode Daemon() Daemon Threads void setDaemon(boolean b) Wenn b true ist, ist das Thread als ein daemon-Thread ; wenn b false ist, ist das Thread als ein user-Thread boolean isDaemon() Wenn das Thread ein daemon-Thread ist, gibt true zuruck; wenn ein user-Thread ist, gibt false zur ü ck Andere Thread-Scheduling Methoden

32 Zusammenfassung Alle Methoden in diesem Kapitel : void setPriority(int priority) ; int getPriority() ; void suspend() ; void resume() ; static void yield() ; void setDaemon(boolean b) ; boolean isDaemon() ; Zusammenfassung


Herunterladen ppt "Java Threads Scheduling Lei Chen November 2000 Proseminar."

Ähnliche Präsentationen


Google-Anzeigen