java threads scheduling lei chen november 2000 proseminar

32
Java Threads Java Threads Scheduling Scheduling Lei Chen November 2000 Proseminar

Upload: huncberct-redder

Post on 06-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Threads Scheduling Lei Chen November 2000 Proseminar

Java Threads Java Threads SchedulingScheduling

Lei ChenNovember 2000

Proseminar

Page 2: Java Threads Scheduling Lei Chen November 2000 Proseminar

Jave Thread Scheduling

Popular--Scheduling Implementierung

Native--Scheduling Unterstützung

Andere Thread--Scheduling Methoden

Zusammenfassung

Page 3: Java Threads Scheduling Lei Chen November 2000 Proseminar

Teil I

Popular-Scheduling Implementierung

Page 4: Java Threads Scheduling Lei Chen November 2000 Proseminar

1. Green ThreadsWas ist ein Green-Threads-ModellGreen Threads sind Benutzer-Ebene-ThreadsJeder Zeit darf einen einzigen Thread ausführenGreen-Threads-Scheduling

Wann wechselt die virtuelle Maschine den laufenden Thread?Für Implementierung von Green-Threads wird empfohlen, Priorität Vererbung zu benutzenWas 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

Page 5: Java Threads Scheduling Lei Chen November 2000 Proseminar

Was ist ein Green-Threads Modell

Processor

Betrie

bssyste

m(B

S)

JVM

BS-Thread

BS-Thread

BS-Thread

Java-Thread

Java-Thread

Stack

Programmzähler

BookkeepingInfo.

… …

StackProgramm

zählerBookkeeping

Info.

JVM: Java Virtuelle Maschine

Page 6: Java Threads Scheduling Lei Chen November 2000 Proseminar

Threads auf Benutzer- und System-Ebene Threads

Meisten Betriebssysteme haben zwei logische Teile: System-Ebene und Benutzer-EbeneWas ist ein Systemaufruf

Ein Systemaufruf Beispiel

Vor- und Nachteil von dieser logischen Teilung

Vorteil: Schutz von BenutzerfehlerNachteil: Aufruf des Betriebssystems

Popular—Scheduling Implementierung

Page 7: Java Threads Scheduling Lei Chen November 2000 Proseminar

Ein Systemaufruf Beispiel

Ein Programm

Der Kern des Betriebssystem

Datei

Benutzer

Ebene

System

Ebene

Systemaufr

uf

lesen

Popular—Scheduling Implementierung

Page 8: Java Threads Scheduling Lei Chen November 2000 Proseminar

Benutzer-Ebene und System-Ebene

Betriebssystem

Benutzer-Ebene System-Ebene

BS-Threads verwaltet ohne Systemaufrufe

BS-Thread werdenim BS-Kern verwaltet

Beispiele

Popular—Scheduling Implementierung

Page 9: Java Threads Scheduling Lei Chen November 2000 Proseminar

BS-Threads auf Benutzerebene

JVM

Der Kern des Betriebssystem

Datei

Benutzerebene

Systemebenelesen

Popular—Scheduling Implementierung

BS-Bibliotheken

Anwendungsebene

BS-Ebene

Page 10: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 11: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 12: Java Threads Scheduling Lei Chen November 2000 Proseminar

2.Windows-Native-ThreadsFür jeden Java-Thread gibt es einen entsprechenden Thread vom Betriebssystem Jeder Windows-Native-Thread kann als ein Prozeß angesehen werdenVerschiedene Implementierung der Java Virtuelle Maschine auf den Windows PlattformenSchwierigkeit der Windows native Threads ImplementierungViele Threads dürfen gleichzeitig in vielen CPUs ausführen

Popular--Scheduling Implementierung

Page 13: Java Threads Scheduling Lei Chen November 2000 Proseminar

Windows-Native-Threads (2)

Windows-Native-Threads SchedulingAbbildungstabelle von Java-Thread Priortäten auf Win32- Plattform

7 Windows Threads Prioritäten für 11 Java Threads Prioritäten5 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

Page 14: Java Threads Scheduling Lei Chen November 2000 Proseminar

Abbildungstabelle von Java-Thread Priortäten auf Betriebssystem(Win32- Plattform)

Java-Priorität Windows 95/NT Priorität

0 THREAD_PRIORITY-IDLE

1 (Thread.MIN_PRIORITY) THREAD_PRIORITY-LOWEST

2 THREAD_PRIORITY-LOWEST

3 THREAD_PRIORITY-BELOW_NORMAL

4 THREAD_PRIORITY-BELOW_NORMAL

5 (Thread.NORM_PRIORITY) THREAD_PRIORITY-NORMAL

6 THREAD_PRIORITY-ABOVE_NORMAL

7 THREAD_PRIORITY-ABOVE_NORMAL

8 THREAD_PRIORITY-HIGHEST

9 THREAD_PRIORITY-HIGHEST

10 (Thread.MAX_PRIORITY) THREAD_PRIORITY-TIME-CRITICAL

Popular--Scheduling Implementierung

Page 15: Java Threads Scheduling Lei Chen November 2000 Proseminar

3. Solaris-Native-ThreadsEs ist ein Zwei-Ebenen-Modell:

Benutzerebene-Threads-Modell: dem Betriebssystemkern unbekanntSystem-Ebene-Threads (LWPs, lightweight processes) : dem Betriebssystemkern bekanntViele Threads in vielen CPUs dürfen gleichzeitig ausführen

Scheduling-Implementierung des Solaris-Native-ThreadsDas Betriebssystem gíbt jedem LWP einen timesliceDie Wirkung des timeslice(4 Beispiele)wieviele LWPs(Lightweight-Process) hat die virtual Maschine?

Die virtuelle Maschine beginnt immer mit einem LWPWenn 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

Page 16: Java Threads Scheduling Lei Chen November 2000 Proseminar

Solaris-Native-Threads Modell

Processor

JVM

SolarisThread

SolarisThread

JavaThread

JavaThread

……

JVM: Java Virtuelle Maschine

Processor

LWP

LWP

Anwendung BS BS-Kern

Priority-based

Not timesliced

timesliced

Page 17: Java Threads Scheduling Lei Chen November 2000 Proseminar

Die Wirkung der timeslice in Solaris-Native-Threads-Modell

LWP1 LWP2

Solaris-Thread1mit

Priorität 5

LWP: lightweight processes

Beispiel1

Syste

m-

Eb

en

e

Solaris-Thread2mit

Priorität 5

Solaris-Thread3mit

Priorität 5

Page 18: Java Threads Scheduling Lei Chen November 2000 Proseminar

Die Wirkung der timeslice in Solaris-Native-Threads-Modell

LWP1 LWP2

LWP: lightweight processes Beispiel

2

Syste

m-

Eb

ene

Solaris-Thread1mit

Priorität 5

Solaris-Thread2mit

Priorität 6

Solaris-Thread3mit

Priorität 4

Page 19: Java Threads Scheduling Lei Chen November 2000 Proseminar

Teil 2

Native-Scheduling-Unterstützung

Page 20: Java Threads Scheduling Lei Chen November 2000 Proseminar

Anbindung von Native Scheduling in Java

Realisierung durch Klasse CPUSupportImplementeriungen für Solaris und Windows

Native-Scheduling-Unterstützung

Die Unterstützung von native scheduling

Page 21: Java Threads Scheduling Lei Chen November 2000 Proseminar

Class CPUSupportpublic 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

Page 22: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

}

Page 23: Java Threads Scheduling Lei Chen November 2000 Proseminar

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.

Page 24: Java Threads Scheduling Lei Chen November 2000 Proseminar

Teil III

Andere Thread-Scheduling Methoden

Page 25: Java Threads Scheduling Lei Chen November 2000 Proseminar

Eine Übersicht über andere Thread-scheduling Methoden

Die Methode suspend() und resume() void suspend() (nicht von Java2 unterstützt):Verhindern ein Thread am unendlichen Laufenvoid resume() (nicht von Java2 unterstützt):Erlauben einem Thread nach suspend wieder zu laufenDer suspended Zustand ist nicht gleich dem blockierten Zustand

Eine Anwendung mit den Methoden suspend() und resume()

Andere Thread-Scheduling Methoden

Page 26: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

}

Page 27: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 28: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 29: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 30: Java Threads Scheduling Lei Chen November 2000 Proseminar

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

Page 31: Java Threads Scheduling Lei Chen November 2000 Proseminar

Die Methode Daemon()

Daemon Threadsvoid 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

Page 32: Java Threads Scheduling Lei Chen November 2000 Proseminar

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