Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003



Podobne dokumenty
Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Kurs programowania. Wykład 8. Wojciech Macyna

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Język Java wątki (streszczenie)

Współbieżność w środowisku Java

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Język Java wątki (streszczenie)

Wątki w Javie. Piotr Tokarski

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Podstawy współbieżności

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie wielowątkowe: podstawowe koncepcje, narzędzia w Javie. J. Starzyński, JiMP2, rok akad. 2005/2006

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

4.1 Napisz kod, w którym definiujesz, tworzysz oraz uruchamiasz wątki z uŝyciem klas java.lang.thread oraz java.lang.runnable.

Przetwarzanie równoległe i współbieżne

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Programowanie wielowątkowe. Tomasz Borzyszkowski

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie komputerów

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Współbieżność w Javie

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Współbieżność w Javie

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Aplikacje w Javie- wykład 11 Wątki-podstawy

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Java. Programowanie Obiektowe Mateusz Cicheński

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

6.1 Pojęcie wątku programu 6.2 Klasy Timer, TimerTask 6.3 Klasa Thread 6.4 Synchronizacja pracy wątków 6.5 Grupowanie wątków

Generatory. Michał R. Przybyłek

Monitory. Jarosław Kuchta

WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Programowanie współbieżne Laboratorium nr 12

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie współbieżne i rozproszone

Kurs języka Python. Wątki

Systemy Rozproszone - Ćwiczenie 4

Wywoływanie metod zdalnych

Programowanie współbieżne Wykład 2. Rafał Skinderowicz

Programowanie obiektowe

Model pamięci. Rafał Skinderowicz

Systemy operacyjne. Zajęcia 11. Monitory

Wielowątkowość 1. Marcin Orchel. AGH University of Science and Technology in Poland 1 / 58

Aplikacje RMI

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Java SE, Laboratorium nr 8 Wątki

Aplikacje RMI Lab4

1 Atrybuty i metody klasowe

Wywoływanie metod zdalnych

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Zaawansowany kurs języka Python

Programowanie współbieżne Laboratorium nr 11

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Multimedia JAVA. Historia

Remote Method Invocation 17 listopada 2010

Tworzenie i wykorzystanie usług

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

7 Pewne uzupełnienia Przepływ sterowania Układacze... 6

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Rozdział 4 Programowanie współbieżne wątki

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie i projektowanie obiektowe

W Javie wątki są obiektami zdefiniowanymi za pomocą specjalnego rodzaju klas.

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Systemy Rozproszone - Ćwiczenie 6

Wykład 8: Obsługa Wyjątków

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Programowanie rozproszone w języku Java

Kurs rozszerzony języka Python

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Operatory. Składnia. Typy proste. Znaki specjalne

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Model pamięci. Rafał Skinderowicz

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Temat zajęć: Tworzenie i obsługa wątków.

Programowanie współbieżne i rozproszone w języku Java

Wprowadzenie do programowania współbieżnego. Grafika, Proste Animacje

Transkrypt:

Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003

Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy komunikacji i synchronizacji

Wątki jako obiekty Wątkiem w JAVIE może być: Obiekt klasy dziedziczącej po Thread Obiekt klasy implementującej Runnable

Przykład ublic class MyThread extends Thread ublic SimpleThread(String str) super(str); ublic void run() for (int i = 0; i < 10; i++) System.out.println(i); try sleep((long)(math.random() * 1000)); catch (InterruptedException e) System.out.println("DONE! " ); public class MyThread2 implements Runnab private Thread t = null; public void start() if (t==null) t = new Thread(this); t.start(); public void run() for (int i = 0; i < 10; i++) System.out.println(i); try sleep((long)(math.random() * 1000)) catch (InterruptedException e) System.out.println("DONE! ");

Sterowanie wątkami Wątki uruchamiamy metodą start() Wątek kończy się wraz z końcem metody run() Nie należy używać stop(),suspend(), resume()

Priorytety JAVA oferuje 10 priorytetów dla wątków Ustalanie metodą setpriority() Warto używać tylko trzech: Thread.MIN_PRIORITY Thread.MAX_PRIORITY Thread.NORM_PRIORITY

Realizacja wątków Maszyna wirtualna korzysta z mechanizmów wątków udostępnianych przez System Operacyjny Zalety Dobra wydajność Jedyny sposób na wykorzystanie wielu procesorów Wady Programista musi być przygotowany na różne scenariusze

Możliwe scenariusze Wątki mogą być wywłaszczane lub pracować na zasadzie współpracy Trzeba synchronizować wątki (bo można zostać wywłaszczonym w dowolnym momencie) Trzeba zadbać o to, żeby wątek czasami oddawał procesor (np. przy blokujących operacjach I/O czy explicite zrzekając się procesora metoda yield() Priorytety mogą nie działać

Synchronizacja wątków Wątki korzystają ze wspólnej przestrzeni adresowej mogą widzieć i modyfikować te same obiekty JAVA udostępnia mechanizm synchronizacji podobny do monitorów

Obiekty jako monitory Każdy obiekt jest monitorem Słowo kluczowe synchronized synchronized (obiekt) // Synchronized Code W danym momencie Synchronized Code wykonywać się może tylko w jednym wątku

Wzajemne wykluczanie Sekcje krytyczne najlepiej realizować synchronizując się na obiekcie reprezentującym klasę (mamy gwarancję, że jest tylko jeden) synchronized (Mutex.getClass() //sekcja krytyczna

Metody synchronizowane Słowo kluczowe synchronized można stosować też tak: class A public method X() synchronized //anything Co jest równoważne class A public method X() synchronized (this) //anything Statyczne metody ozanczone synchronized synchronizują się na this.getclass()

wait() i notify() Wywołanie wait()na danym obiekcie powoduje wstrzymanie wątku dopóki nie zostanie wykonane notify() na tym samym obiekcie Wątek wywołujący wait() musi być właścicielem monitora na którym wykonujemy oczekiwanie (czyli być w bloku synchronizowanym na tym obiekcie). Metoda wait() zwalnia monitor, aby możliwe było wykonanie notify()

notify() i notifyall() notify() budzi jeden, arbitralnie wybrany wątek notifyall()budzi wszystkie wątki oczekujące na danym obiekcie Obudzony wątek (wątki) rywalizuje z pozostałymi o blokadę monitora. Nie ma żadnej preferencji dla budzonych wątków Oznacza to, że konstrukcję postaci: if (!warunek) wait(); Tu warunek spełniony Należy zastąpić przez: while (!warunek) wait(); Tu warunek spełniony

Przykład 1 - semafor public synchronized void P() throws InterruptedException while( count <= 0 ) this.wait(); --count; public synchronized void V() int current_count = count; count++; if (current_count == 0) notifyall();

Przykład 2 czytelnicy i pisarze public class RWLocks private int[] readerslock = new int[1]; private int[] writerslock = new int[1]; private int readers = 0; private int waitingreaders = 0; private int waitingwriters = 0; private int writers = 0;

ReadLock() public void readlock() throws InterruptedException synchronized (this) if (writers+waitingwriters==0) readers++; return; waitingreaders++; synchronized (readerslock) readerslock.wait(); synchronized(this) readers++; waitingreaders--;

ReadUnlock() public void readunlock() throws InterruptedException synchronized(this) readers--; if (readers>0 waitingwriters==0) return; synchronized (writerslock) writerslock.notify();

WriteLock() public void writelock() throws InterruptedException synchronized(this) if (readers+writers==0) writers++; return; waitingwriters++; synchronized (writerslock) writerslock.wait(); synchronized(this) waitingwriters--; writers++;

WriteUnlock() public void writeunlock()throws InterruptedException synchronized (this) writers--; synchronized (readerslock) readerslock.notifyall();

Czy można inaczej? Wait() i notify() wymagają aby być właścicielem monitora stąd pozornie niepotrzebne sekcje synchronized Gdyby wait() mogło uwalniać inny lock niż obiektu na rzecz którego jest wywoływany całość możnaby zapisać jako metody synchronizowane

Wątki a bytecode

RMI