Java threads scheduling
Download
1 / 32

Java Threads Scheduling - PowerPoint PPT Presentation


  • 89 Views
  • Uploaded on

Proseminar. Java Threads Scheduling. Lei Chen November 2000. Jave Thread Scheduling. Popular--Scheduling Implementierung Native--Scheduling Unterst ü tzung Andere Thread--Scheduling Methoden Zusammenfassung. Teil I. P opular-Scheduling Implementierung. Was ist ein Green-Threads-Modell

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Java Threads Scheduling' - manju


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Java threads scheduling

Proseminar

Java Threads Scheduling

Lei Chen

November 2000


Jave thread scheduling
Jave Thread Scheduling

  • Popular--Scheduling Implementierung

  • Native--Scheduling Unterstützung

  • Andere Thread--Scheduling Methoden

  • Zusammenfassung


Teil i

Teil I

Popular-Scheduling Implementierung


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

1. Green Threads


Was ist ein green threads modell
Was ist ein Green-Threads Modell

Stack

BS-Thread

Betriebssystem(BS)

Programm

zähler

JVM

Java-Thread

BS-Thread

Processor

Bookkeeping

Info.

BS-Thread

Java-Thread

Stack

Programm

zähler

Bookkeeping

Info.

JVM: Java Virtuelle Maschine


Threads auf benutzer und system ebene threads

Popular—Scheduling Implementierung

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


Ein systemaufruf beispiel

Popular—Scheduling Implementierung

Ein Systemaufruf Beispiel

Benutzer

Ebene

Ein

Programm

Systemaufruf

System

Ebene

Der Kern

des Betriebssystem

Datei

lesen


Benutzer ebene und system ebene

Popular—Scheduling Implementierung

Benutzer-Ebene und System-Ebene

Betriebssystem

Benutzer-Ebene

System-Ebene

BS-Threads

verwaltet ohne Systemaufrufe

BS-Thread werden

im BS-Kern

verwaltet

Beispiele


Bs threads auf benutzerebene

Popular—Scheduling Implementierung

BS-Threads auf Benutzerebene

JVM

Anwendungsebene

BS-Ebene

BS-Bibliotheken

Benutzerebene

Der Kern

des Betriebssystem

Datei

lesen

Systemebene


Ein implementierungsbeispiel von green threads scheduling

Popular--Scheduling Implementierung

Ein Implementierungsbeispiel von green-Threads-Scheduling

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

}

}


Java threads scheduling

Popular--Scheduling Implementierung

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

}

}


2 windows native threads

Popular--Scheduling Implementierung

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


Windows native threads 2

Popular--Scheduling Implementierung

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


Abbildungstabelle von java thread priort ten auf betriebssystem win32 plattform

Popular--Scheduling Implementierung

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


Solaris native threads

Popular--Scheduling Implementierung

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


Java threads scheduling

Solaris-Native-Threads Modell

Anwendung

BS

BS-Kern

Java

Thread

Solaris

Thread

LWP

Processor

JVM

Solaris

Thread

LWP

Processor

Java

Thread

Priority-based

Not timesliced

timesliced

JVM: Java Virtuelle Maschine


Die wirkung der timeslice in solaris native threads modell
Die Wirkung der timeslicein Solaris-Native-Threads-Modell

System-Ebene

LWP1

LWP2

Solaris-Thread1

mit

Priorität 5

Solaris-Thread2

mit

Priorität 5

Solaris-Thread3

mit

Priorität 5

LWP: lightweight processes

Beispiel1


Java threads scheduling

Die Wirkung der timeslicein Solaris-Native-Threads-Modell

LWP1

LWP2

System-Ebene

Solaris-Thread1

mit

Priorität 5

Solaris-Thread2

mit

Priorität 6

Solaris-Thread3

mit

Priorität 4

LWP: lightweight processes

Beispiel2


Teil 2

Teil 2

Native-Scheduling-Unterstützung


Java threads scheduling

Native-Scheduling-Unterstützung

Die Unterstützung

von native scheduling

  • Anbindung von Native Scheduling in Java

    • Realisierung durch Klasse CPUSupport

    • Implementeriungen für Solaris und Windows


Class cpusupport

Native-Scheduling-Unterstützung

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

}

}


Java threads scheduling

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

}


Java threads scheduling

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.


Java threads scheduling

Teil III

  • Andere Thread-Scheduling Methoden


Eine bersicht ber andere thread scheduling methoden

Andere Thread-Scheduling Methoden

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


Java threads scheduling

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

}


Java threads scheduling

Eine Anwendung

mit den Methoden suspend() und resume()

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

}

}


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

Die Methode yield()


Ein beispiel mit der methode yield

Andere Thread-Scheduling Methoden

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

}

}


Wie realisiert die methode yield

Andere Thread-Scheduling Methoden

Wie realisiert die Methode yield()

static void yield()

Thread1

(pri. 5)

Thread2

(pri. 5)

. . .

Thread n

(pri. 5)

Thread1

(pri. 5)

currently running

Thread

Warteliste

mit gleicher Priorität


Die methode daemon

Andere Thread-Scheduling Methoden

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


Zusammenfassung

Zusammenfassung

Zusammenfassung

  • Alle Methoden in diesem Kapitel :

    • void setPriority(int priority);

    • int getPriority();

    • void suspend();

    • void resume();

    • static void yield();

    • void setDaemon(boolean b) ;

    • booleanisDaemon() ;