Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Programowanie wielowątkowe w Javie Wykład 9 mgr inż. Michał Misiak.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Związki w UML.
Podstawowe pojęcia programowania współbieżnego
Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
Programowanie obiektowe
Programowanie obiektowe
Zaawansowane metody programowania – Wykład V
SYSTEMY OPERACYJNE WSTĘP
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Odśmiecanie Grzegorz Timoszuk
Programowanie wielowątkowe
Multimedia Obrazy i dźwięki w apletach Javy, praca z tekstem, zdarzenia od myszki, obsługa wyjątków w Javie, aplety z wątkami, animacja poklatkowa.
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
C++ wykład 2 ( ) Klasy i obiekty.
Języki programowania obiektowego
ZARZĄDZANIE PROCESAMI
Język Java Wielowątkowość.
Muteksy Muteksy (mutex – MUTual EXclusion) są prostymi obiektami synchronizacyjnymi pełniącymi rolę semaforów binarnych dla wątków (chroniącymi sekcje.
Semafory według normy POSIX
14. WĄTKI Procesy w tradycyjnym sensie (tworzone przez wykonanie funkcji fork) mają przydzielaną oddzielną przestrzeń adresową. W przestrzeni tej jest.
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Wątki.
Pamięć wspólna Przegląd stosowanych rozwiązań Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008.
Budowa systemu komputerowego
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Tworzenie aplikacji mobilnych
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie obiektowe – zastosowanie języka Java SE
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
JAVA.
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Problem sekcji krytycznej
Przerwanie ang. interrupt.
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Programowanie obiektowe 2013/2014
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
Programowanie w języku C++
Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Kurs języka C++ – wykład 4 ( )
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Hibernate Podstawy.
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Paweł Starzyk Obiektowe metody projektowania systemów
Programowanie sieciowe w Javie Michał Kuciapski
Struktura systemu operacyjnego
Wstęp do programowania Wykład 7
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Programowanie Obiektowe – Wykład 6
Wątki, programowanie współbieżne
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
Tworzenie wątków w Javie
Zapis prezentacji:

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Programowanie wielowątkowe w Javie Wykład 9 mgr inż. Michał Misiak

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Treść wykładu Informacje dotyczące seminarium Współbieżność Wątki i procesy Cykl życia wątku

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Seminarium „Java w telekomunikacji” Termin: , godz Czas trwania: 1,5 h Miejsce: Aula Obecność:  wykład otwarty,  w ramach wykładów, których nie było ze względu na dni rektorskie Prowadzący:  Leszek Tomaszewski: Bezpieczeństwo VoIP  Maciej Żwirski: Techniki mobilne Javy  Niespodzianka

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Współbieżność Programy współbieżne (concurrent software) – aplikacje potrafiące wykonywać kilka rzeczy w tym samym czasie, z uwzględnieniem zdarzeń priorytetowych.  np. reakcja na zdarzenie myszki/klawiatury edytora tekstu, który aktualnie formatuje tekst. Java została zaprojektowana do tworzenia programów współbieżnych dostarczając odpowiedni zbiór klas. Java 5.0 dostarcza wysokopoziomowe API do obsługi współbieżności

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Problemy związane z programowaniem współbieżnym safety: bezpieczeństwo programu livness: możliwość wystąpienia zakleszczenia niedeterministyczne zachowanie starty mocy obliczeniowej na:  przełączania pomiędzy wątkami na procesorze  Synchronizację wątków

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wątki i procesy Wątki i procesy są podstawowymi pojęciami i jednostkami wykonawczymi. W Javie jednostką wykonawczą są wątki (threads) System operacyjny posiada wiele wątków i procesów, które dzielą czas procesora

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Proces Proces posiada własne środowisko wykonawcze (execution environment), czyli zbiór przyporządkowanych zasobów (np. pamięć) na czas wykonania. Proces może być postrzegany jako pojedynczy program lub aplikacja Procesy mogą się komunikować tzw. Inter Process Communication (IPC) korzystając z gniazd lub rur (pipes). IPC służy do komunikacji pomiędzy procesami umieszczonymi na różnych maszynach JVM uruchamiane są przeważnie jako pojedynczy proces. Aplikacje mogą tworzyć nowe procesy.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wątek Wątki nazywane są czasami „lekkimi procesami” Wątek ma również do wyłączonej dyspozycji zasoby, natomiast zasoby nie są przyznawane tak suwerenie jak w przypadku procesu.  np. wspólna sekcja danych, zamiast własnej przestrzeni adresowej. Wątki działają w ramach procesu: współdzielą plików, pamięć. Każda z aplikacji Java posiada co najmniej jeden wątek oraz kilka wątków pomocniczych (zarządzanie pamięcią, obsługa zdarzeń) Głównym wątek aplikacji ma zdolność do tworzenia nowych Wykonywanie wątków równoległe jest możliwe jedynie na maszynach wieloprocesorowych. Na maszynach jednoprocesorowych wątki wykonywane są współbieżnie.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Cykl życia wątku new ready Start () running dead yield() dispatch() run completes() waiting notify() wait() sleeping blocked sleep() Block on I/O I/O completed Times expires or interrupted new – nowy wątek. Bezpośrednio, bo wywołaniu konstruktora Thread. runnable – zachodzi po wykonaniu metody start. running – wykonywany jest kod wątku z metody run(). not runnable – wątek zwalania zasoby. Oczekuje zajścia jakiegoś zdarzenia: czeka na zakończenie operacji wej/wyj upłynięcia określonego czasu (sleep) oczekuje gdy inny wątek wywoła notify, notifyAll() (wait) Oczekuje wywołania przez inny wątek resume()

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Obiekt: Thread Każdy obiekt jest skojarzony z instancją klasy Thread Dwa podejścia do tworzenia współbieżnych aplikacji  Bezpośrednie tworzenie wątku oraz zarządzanie nim po przez utworzenie instancji klasy Thread  Oddzielenie zarządzania wątkami od aplikacji po przez umieszczenie ich w osobnym obiekcie (executor) Klasa Thread udostępnia szereg metod m.in. statyczne, które pozwalają na uzyskanie informacji o wątku. a/lang/Thread.html

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przykład 1. Dwa podejścia tworzenia wątków Dziedziczenie z klasy Thread Implementacja interfejsu Runnable public class NewRunnable implements Runnable { public void run() { System.out.println(„Pierwszy watek"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } public class NewThread extends Thread { public void run() { System.out.println("Pierwszy Watek"); } public static void main(String args[]) { (new HelloThread()).start(); } Uwaga! Obydwa podejścia wymagają wystartowania wątku: Thread.start Pytanie! Które z powyższych podejść stosować?

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Zatrzymywanie wątków Zatrzymywanie wątków realizowane po przez Thread.sleep na określony czas (podawany w mili- lub nanosekundach) Brak 100% pewności, że wątek zostanie zatrzymany na precyzyjnie określony czas Wydajny sposób na oddanie czasu procesora innym wątkom bądź procesom Może zostać wykorzystane do oczekiwania na pojawienie się odpowiedniego stanu innego wątku

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Metody wait() i notify() Wywołanie metod wait() i notify() może odbywać się wyłączenie w ramach w ramach bloku, który jest zsynchronizowany. wait ():  zatrzymanie aktualnego wątku  interpreter umieszcza wątek w kolejce związanej z obiektem  blokada synchronizacyjna jest zwalniana dla tego obiektu notify ():  blokadę synchronizacyjna zostaje zwolniona dla obiektu O  Jeśli istnieje wątek T (związany z obiektem O), żądający wykonania bloku synchronizowanego – uzyskuje monitor O i jest usuwany z kolejki wątków związanej z O  T jest wznawiany za wywołaniem wait(), które spowodowało zatrzymanie

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przerwanie (Interrupts) Przerwanie – zatrzymuje natychmiast wykonanie zadania przez wątku i zleca mu nowe zadanie. Zachowanie się wątku po wykonaniu przerwania definiuje programista, natomiast standardowo przyjęło się, że następuje zabicie wątku Metoda sleep może rzucić wyjątkiem: InterruptedException. Metody, które posługują się takim wyjątkiem przeważnie zaprojektowane zostały w ten sposób, aby kończyć działanie wątku Mechanizm przerwań bazuje na fladze: interrupt status, która jest ustawiana w momencie wywołania metody Thread.interrupt Sprawdzenie statusu flagi realizowane za pomocą metody: Thread.isInterrupted

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Metoda Join Metoda ta pozwala oczekiwać jednemu wątkowi na ukończenie wykonywania zadania przez drugi Wywołanie metody t.join() w ciele danego wątku, gdzie t jest innym wątkiem powoduje zatrzymanie wykonywania danego wątku do momentu zakończenia wykonywania wątku t. Przeładowanie join pozwala określić np. czas oczekiwania na wątek Join odpowiada na wyjątek InterruptException

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Priorytety wątki są ustawiane do uruchomienia w kolejce i każdemu z nich przypisywany jest priorytet od 1 do 10 standardowy priorytet Thread.NORM_PRIORITY posiada wartość 5 metoda: getPriority() pozwala na pobranie priorytetu

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Synchronizacja Wątki komunikują się po przez udostępnianie sobie pól obiektów. Jest to bardzo wydajna forma komunikacji natomiast może powodować błędy: spójności pamięci. Narzędziem do ochrony przed problemami związanymi ze współdzieleniem zasobów przez wątki jest synchronizacja.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Interferencja pomiędzy wątkami Stan: dwie metody wykonywane są w dwóch różnych wątkach na tym samym zbiorze danych Problem: przeplatanie wątków, nawet pojedyncze wyrażenia mogą być wykonane etapowo przez JVM  Np. dekompozycja wyrażenia c -- class Counter { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; }

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Niespójność pamięci Niespójność pamięci pojawia się w momencie, gdy jeden z wątków odwołuje się do danych zmienionych bez jego wiedzy i traktuje te dane jako poprawne Relacja happen-before pozwala na ustalenie dostępu do zasobu Relacja happen-before tworzona jest w przypadku synchronizacji.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Metody synchronizacji Synchronizacja może być na dwóch poziomach:  Synchronizacja metody  Synchronizacja wyrażenia Konstruktor nie może być synchronizowany ponieważ w trakcie tworzenia obiektu, tylko jeden wątek tym się zajmuje Wykluczanie części kodu z pozostałymi metodami klasy po przez synchronized(this){ … } public class Licznik2 { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; }

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Żywotność: zakleszczenie (deadlock) – dwa lub więcej wątków zostaje zablokowane na zawsze, każdy czeka na każdy zagłodzenie (starvation) – sytuacja, w której dany wątek nie może otrzymać dostępu do zasobów i wykonać swojego zadania livelock – bardzo podobne do deadlock. Wątki nie zostają zatrzymane, natomiast nie wykonują postępów

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wątek demon Wątek demon – nazywany wątkiem usługowym, działa na niskim priorytecie. Pełni funkcje usługowe. Wątek demon pełni funkcje usługową względem innych wątków Przykładem wątku demona jest garbage collector, który działa w tle non-stop. Wątek może ustawić flagę demona. W przypadku, gdy flaga ustawiona jest na false – wątek jest wątkiem użytkownika. Ustawienie flagi wątku musi być realizowane przed wystartowaniem wątku.

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Zawansowane sposoby synchronizacji Synchronizacja realizowana na monitorze (blokowanie) – posiada szereg ograniczeń Bardziej zawansowane sposoby blokowania realizowane przez pakiet: java.util.concurrency.locks Przykładowy obiekt: Lock. Lock zachowuje się podobnie jak blokada realizowana przez synchronized. Jedynie jeden obiekt może trzymać obiekt Lock Lock wspiera mechanizmy notify/wait Przewagą Lock jest możliwość cofnięcia żądania przejęcia zasobów, w przypadku, gdy są niedostępne.