Wątki, programowanie współbieżne

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Programowanie obiektowe
Związki w UML.
Podstawowe pojęcia programowania współbieżnego
Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Static, const, volatile.
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Implementacja ekstensji klasy
Programowanie Obiektowe w Javie (c.d.)
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
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.
C++ wykład 2 ( ) Klasy i obiekty.
Gniazda komunikacji sieciowej w języku Java
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Język Java Wielowątkowość.
Semafory według normy POSIX
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Tworzenie aplikacji mobilnych
Programowanie obiektowe III rok EiT
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Programowanie obiektowe
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.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Programowanie obiektowe 2013/2014
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
W ą t e k (lekki proces) thread.
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Kurs języka C++ – wykład 4 ( )
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
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.
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Programowanie wielowątkowe w Javie Wykład 9 mgr inż. Michał Misiak.
Paweł Starzyk Obiektowe metody projektowania systemów
Programowanie sieciowe w Javie Michał Kuciapski
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Podstawowe konstrukcje języka Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin.
Programowanie Obiektowe – Wykład 6
(według:
Programowanie Obiektowe – Wykład 2
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
Założenia projektowe Javy
BYDGOSKI FESTIWAL NAUKI
PGO Dziedziczenie Michail Mokkas.
Programowanie w Javie 1 Dr Robert Kowalczyk
Tworzenie wątków w Javie
Zapis prezentacji:

Wątki, programowanie współbieżne Krystian Ignasiak kmi@ire.pw.edu.pl http://tiger.ire.pw.edu.pl/pzdt

Zalety programowania współbieżnego odpowiadanie na zdarzenia dostępność usług łatwość sterowania jeden obiekt – jeden wątek przetwarzanie równoległe

Wady programowania współbieżnego problem bezpieczeństwa programu (safety) możliwość wystąpienia zakleszczenia i innych sytuacji wpływających na żywotość programów (liveness) zachowania niedeterministyczne wymagania dodatkowej mocy obliczeniowej do tworzenia wątków i przełączania między wątkami w środowiskach jednoprocesorowych; wymagania dodatkowej mocy obliczeniowej na synchronizację wątków;

Co to jest wątek (thread) ? Zestaw trzech elementów: Procesor Pamięć programu (program, kod) Pamięć danych (dane)

Wątki w Javie public class ThreadTester { public static void main(String args[]) { HelloRunner r = new HelloRunner(); Thread t = new Thread(r); t.start(); } } class HelloRunner implements Runnable { int i; public void run() { i = 0; while (true) { System.out.println(”Hello ” + i++); if (i == 50) { break; } } } }

Tworzenie wątków

Uruchamianie wątku th.start() Wywołanie metody start powoduje przejscie wątku do stanu uruchomiony Wywołanie start nie musi oznaczać, że sterowanie natychmiast znajdzie się w metodzie run tego wątku

Kolejkowanie wątków Kolejkowanie zwykle bazuje na priorytetach (jednak nie ma gwarancji, ze konkretna implementacja w ogóle używa priorytetów) th.getPriority(), th.setPriority() Priorytet – liczba w zakresie 1-10 Thread.MIN_PRIORITY, Thread.MAX_PRIORITY, Thread.NORM_PRIORITY Java zwykle kolejkuje wątki metodą z wywłaszczaniem procesora (preemptive) Niektóre implementacje stosują metodę z podziałem czasu (timeslicing)

Zakończenie działania wątku public class Runner implements Runnable { private boolean timeToQuit=false; public void run() { while ( ! timeToQuit ) { ... } // ustaw obiekt wątku w odpowiednim stanie } public void stopRunning() { timeToQuit=true; } } public class ThreadController { private Runner r = new Runner(); private Thread t = new Thread(r); public void startThread() { t.start(); } public void stopThread() { r.stopRunning(); } }

Sterowanie wątkami isAlive() Thread.sleep() join() Thread.yield()

Dwa sposoby tworzenia wątku Dziedziczenie po klasie Thread Mniej skomplikowany kod Implementowanie Runnable Łatwiejsze projektowanie obiektowe Omijamy ograniczenie pojedynczego dziedziczenia Spójność z modelem (procesor, kod, dane)

Stany wątków, 1/2

Stany wątków, 2/2

Synchronizacja, 1/2 Dwa wątki (lub więcej) korzystają w tym samym czasie z danych jednego obiektu – może powstać konflikt (read-write, write-write) Gwarantuje się, że prymitywne operacje (dostęp do zmiennej typu prostego, oprócz typów long i double) będą wykonane w całości bez konieczności jawnego synchronizowania) Kompilator może dokonywać optymalizacji dostępu do danych (volatile);

Synchronizacja, 2/2 Bloki synchronizowane synchronized (myObject) { ... } Bloki synchronizowane są wykonywane w całości (chyba, że wait()...) Metoda synchronizowana może wywołać inną synchronizowaną na rzecz tego samego obiektu bez blokowania Słowo kluczowe synchronized może być przedefiniowane w klasach pochodnych Metody deklarowane w interfejsach nie mogą być synchronizowane

wait(), notify() Metody wait(), notify() mogą być wywołane tylko w ramach bloku synchronizowanego wait(): zatrzymanie aktualnego wątku interpreter umieszcza wątek w kolejce związanej z obiektem blokada synchronizacyjna jest zwalniana dla tego obiektu notify(): Zwalnia się blokadę synchronizacyjną 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