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



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

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

Język Java wątki (streszczenie)

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

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

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

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

Język Java wątki (streszczenie)

Podstawy współbieżności

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

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

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

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

Programowanie komputerów

Java. Programowanie Obiektowe Mateusz Cicheński

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

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

Wątki w Javie. Piotr Tokarski

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

Współbieżność w Javie

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

Współbieżność w Javie

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Systemy Rozproszone - Ćwiczenie 4

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

Programowanie współbieżne Laboratorium nr 11

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

Monitory. Jarosław Kuchta

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

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

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

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

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

1. Co można powiedzieć o poniższym kodzie?

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

Wykład 4: Wejście/wyjście: strumienie Java

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

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

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

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

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

Java SE, Laboratorium nr 8 Wątki

Systemy operacyjne. Zajęcia 11. Monitory

Programowanie i projektowanie obiektowe

Model pamięci. Rafał Skinderowicz

Programowanie obiektowe

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

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

Podstawy i języki programowania

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

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

Generatory. Michał R. Przybyłek

1. Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(string s) { return Integer.parseInt(s); }

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

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Programowanie współbieżne Laboratorium nr 12

Kurs programowania. Wykład 9. Wojciech Macyna

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Operatory. Składnia. Typy proste. Znaki specjalne

Aplikacja wielow tkowa prosty komunikator

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

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

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

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Multimedia JAVA. Historia

Systemy Rozproszone - Ćwiczenie 6

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

1 Atrybuty i metody klasowe

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie wielowątkowe. Jarosław Kuchta

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

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

Stanowe komponenty sesyjne

JAVA I SIECI. MATERIAŁY:

Platformy Programistyczne Zagadnienia sieciowe i wątki

Wprowadzenie do programowania współbieżnego

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

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

Programowanie współbieżne Wykład 7. Iwona Kochaoska

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Metody Metody, parametry, zwracanie wartości

Programowanie obiektowe

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

Java: interfejsy i klasy wewnętrzne

Wykład 4: Klasy i Metody

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

Dawid Gierszewski Adam Hanasko

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

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

Model pamięci. Rafał Skinderowicz

Tworzenie i wykorzystanie usług

Programowanie i projektowanie obiektowe

Transkrypt:

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

Programy, Procesy, Wątki Program to zestaw instrukcji do wykonania, dane do przetworzenia, mechanizmy sterujące (stos) Proces w komputerze to instancja programu z własnymi danymi i mechanizmami sterującymi Wątek (thread, lightweight process, kernel-space thread) różni się od procesu tym że współdzieli dane Czasem mówi się o włóknach (fiber, user-space thread, green thread) dla wątków w przestrzeni zasobów użytkownika

Sposoby realizacji współbieżności Timesharing: Cooperative multitasking (green threads) - proces kończy działanie gdy: zakończy działanie zablokuje się na operacji blokującej np. I/O dopuści procesy inne do pracy (yield) Wielozadaniowość z wywłaszczaniem (Pre-emptive multitasking) proces może zostać wstrzymany przez scheduler systemy operacyjnego

Problemy w przetwarzaniu współbieżnym while(flag!=1) { //!!! flag=0 //instrukcje wymagajace oddzielenia...... flag=1

Istotne pojęcia Sekcja Krytyczna Zestaw danych wymagających wyłącznej obsługi ze strony 1 procesu/wątku Semafor (Edsger Dijkstra THE Operating System) zmienna strażnik - operacja test&set Monitor klasa mogąca być wykonana przez kilka procesów, chroniona mechanizmem wzajemnego wykluczania (Mutex), obejmująca jakąś sekcję krytyczną

Poprawność Programu Współbieżnego Dwa type własności poprawności: Bezpieczeństwo (safety) Problemy: niepoprawność (race conditions) Żywotność (liveness) Problemy globalne: zakleszczenie (deadlock, livelock) Problemy lokalne: wykluczenie (lockout), zagłodzenie (starvation)

Klasyczne zagadnienia Problem Śpiącego Golibrody 3 monitory: golibrody, kolejki klientów, mutex Problem 5-ciu filozofów zagłodzenie zakleszczenie Rozwiązanie: wprowadzenie porządku dla monitorów

Klasa Thread java.lang.thread metoda public void run() zawiera zadania do wykonania uruchamiamy nowy wątek poprzez public void start() a NIE poprzez run()

Klasa Thread public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getname()); try { sleep((long)(math.random() * 1000)); catch (InterruptedException e) { System.out.println("DONE! " + getname());

Klasa Thread public class TwoThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start();

Klasa Thread

Interfejs Runnable public interface Runnable { public void run (); Stosujemy gdy nie chcemy stracić hierarchii klas: przy implementacji appletów, własnych mechanizmów etc. etc.

Cykl Życia Wątku

Scheduling Dany wątek przerywa działanie gdy: Przechodzi w stan Non Runnable Wątek o wyższym priorytecie się obudził wykonał yield() (trafia wtedy na kolejkę FIFO wątków o tym samym priorytecie) Zakończył metodę run()

Mutex Obsługa mutexa: modyfikator metody synchronized blok synchronized(obj) {...

Mutex class SynchStack { int sp = 0; int data[] = new int[6]; public synchronized void push(int i) { data[sp]=i; sp++; public synchronized int pop() { sp--; return data[sp];

Mutex class SynchStack { int sp = 0; int data[] = new int[6]; public void push(int i) { synchronized(this) { data[sp]=i; sp++; public int pop() { synchronized(this) { sp--; return data[sp];

Mutex Komunikacja między wątkami odbywa się przy użyciu dwu kolejek związanych w wątkami: Kolejka synchronized dostęp do monitora związanego z daną instancją Kolejka wait / notify pozwalająca na sprawdzanie szczególnych warunków związanych z daną instancją wait(), wait(long) należy posiadać monitor by je wywołać, monitor natychmiast jest zwalniany notify(), notifyall() - należy posiadać monitor by je wywołać

Mutex class SynchStack { int sp = 0; int data[] = new int[6]; public synchronized void push(int i) { while(sp>=6) { try { this.wait(); catch(interruptedexception e) {... data[sp]=i; sp++; this.notifyall();

Mutex public synchronized int pop() { while(sp<=0) { try { this.wait(); catch(interruptedexception e) {... sp--; this.notifyall(); return data[sp]; //POPRAWNE, NADAL MAMY MONITOR

Synchronizacja public class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number;

Synchronizacja public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(number, i); try { sleep((int)(math.random() * 100)); catch (InterruptedException e) {

Synchronizacja public class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { int value = 0; for (int i = 0; i < 10; i++) value = cubbyhole.get(number);

Synchronizacja public class CubbyHole { private int contents; private boolean available = false; public synchronized int get(int who) { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; System.out.println("Consumer " + who + " got: " + contents); notifyall();return contents;

Synchronizacja public synchronized void put(int who, int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value; available = true; System.out.println("Producer " + who + " put: " + contents); notifyall();

Synchronizacja public class ProducerConsumerTest { public static void main(string[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1); p1.start(); c1.start();

Synchronizacja Producer #1 put: 0 Consumer #1 got: 0 Producer #1 put: 1 Consumer #1 got: 1 Producer #1 put: 2 Consumer #1 got: 2 Producer #1 put: 3 Consumer #1 got: 3 Producer #1 put: 4 Consumer #1 got: 4 Producer #1 put: 5...

Pipes public static Reader process(reader source) throws IOException { BufferedReader in = new BufferedReader(source); PipedWriter pipeout = new PipedWriter(); PipedReader pipein = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); new ProcessThread(out, in).start(); return pipein;

Pipes public class ProcessThread extends Thread { private PrintWriter out = null; private BufferedReader in = null; public ProcessThread(PrintWriter out, BufferedReader in) { this.out = out; this.in = in;

Pipes public void run() { if (out!= null && in!= null) { try { String input; while ((input = in.readline())!= null) { out.println(process(input));//blocking I/O out.flush(); out.close(); catch (IOException e) { System.err.println("ProcessThread run: " + e);

Pipes private String process(string source) { String processedstring=null;... return processedstring;