Programowanie współbieżne Wykład 2. Rafał Skinderowicz
|
|
- Rafał Bernard Sobczak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Programowanie współbieżne Wykład 2 Rafał Skinderowicz
2 Program współbieżny a sekwencyjny Program zapis algorytmu, ciąg instrukcji do wykonania przez procesor: statyczny sekwencja instrukcji przekształcających dane wejściowych w wyjściowe Program sekwencyjny program przeznaczony do wykonania przez jeden procesor (rdzeń) pojedynczy przepływ sterowania Program współbieżny (ang. concurrent program) składa się ze zbioru programów sekwencyjnych lub zadań obliczeniowych (ang. task), które mogą być wykonywane równolegle. 2
3 Proces Proces program wykonywany na komputerze pod kontrolą systemu operacyjnego. ma charakter dynamiczny ma przydzielone zasoby: pamięć osobna przestrzeń adresowa, zwykle podzielona na: segment kodu instrukcje wykonywanego programu segment danych zmienne globalne programu stos - dla zmiennych automatycznych, wywoływania funkcji, przekazywania parametrów i zwracania wyników sterta dla zmiennych dynamicznych licznik programu urządzenia we/wy ma co najmniej jeden aktywny wątek 3
4 Proces a system operacyjny W systemie jednoprocesorowym nie ma prawdziwej równoległości procesy wykonywane są naprzemiennie metodą przeplotu. Podobnie w ramach jednego procesu może działać wiele wątków. Każdy proces może być w jednym ze stanów: nowy aktywny wykonywany przez procesor czekający np. na zajście zdarzenia gotowy czkający na przydzielenie procesora zakończony 4
5 Wątek Wątek Wątek to część programu wykonywana jednocześnie w ramach jednego procesu. Wątki w ramach procesu wykonywane są współbieżnie i korzystają z tej samej przestrzeni adresowej efektywna komunikacja Tworzenie i zarządzanie wątkami jest mniej kosztowne od tworzenia i zarządzania procesami Wątki nazywane są często lekkimi procesami Konieczność synchronizacji dostępu do współdzielonych zasobów 5
6 Równoległość a współbieżność Równoległość wykonanie programów przez komputer nakłada się w czasie Współbieżność wykonanie programów może, ale nie musi nakładać się w czasie z punktu widzenia obserwatora zewnętrznego programy wykonują się jednocześnie, nawet w przypadku systemu jednoprocesorowego 6
7 Sposoby wykonania programów sekwencyjne każda kolejna operacja wykonywana jest po zakończeniu poprzedniej równoległe więcej niż jedna operacja wykonywana jest w tym samym czasie wymaga więcej, niż jednego procesora przeplatane wykonanie programu odbywa się fragmentami na przemian z fragmentami innych uruchomionych programów współbieżne uogólnione pojęcie obejmujące zarówno wykonanie równoległe, jak i przeplatane 7
8 Proces sekwencyjny Proces sekwencyjny Proces sekwencyjny składa się ze skończonego ciągu instrukcji. Indeks kolejnej instrukcji do wykonania wskazywany jest przez wskaźnik instrukcji. P p 1 p 2 p 3 p 4 P' p 1 p 2 p 3 p 4 Rysunek 1: Dwa równoważne wykonania procesu sekwencyjnego t 8
9 Wykonanie współbieżne Program współbieżny składa się ze skończonego zbioru procesów sekwencyjnych, które zapisane są za pomocą skończonego zbioru instrukcji atomowych Wykonanie programu współbieżnego polega na wykonaniu ciągu instrukcji atomowych uzyskanego przez dowolne przeplecenie ze sobą instrukcji poszczególnych procesów. Każdy z możliwych przeplotów tworzy scenariusz. 9
10 Przeplot Przykład załóżmy, że dane są procesy (lub wątki): P złożony z instukcji (atomowych) p 1 i p 2 Q złożony z instrukcji q 1 i q 2 Możliwe przeploty wykonania to: p 1 q 1 p 2 q 2 p 1 q 1 q 2 p 2 p 1 p 2 q 1 q 2 q 1 p 1 q 2 p 2 q 1 p 1 p 2 q 2 q 1 q 2 p 1 p 2 10
11 Przeplot Przykład załóżmy, że dane są procesy (lub wątki): P złożony z instukcji (atomowych) p 1 i p 2 Q złożony z instrukcji q 1 i q 2 Możliwe przeploty wykonania to: p 1 q 1 p 2 q 2 p 1 q 1 q 2 p 2 p 1 p 2 q 1 q 2 q 1 p 1 q 2 p 2 q 1 p 1 p 2 q 2 q 1 q 2 p 1 p 2 Teoretycznie nie wszystkie scenariusze są możliwe, np. q 2 p 1 p 2 q 1 10
12 Przeplot Przykład załóżmy, że dane są procesy (lub wątki): P złożony z instukcji (atomowych) p 1 i p 2 Q złożony z instrukcji q 1 i q 2 Możliwe przeploty wykonania to: p 1 q 1 p 2 q 2 p 1 q 1 q 2 p 2 p 1 p 2 q 1 q 2 q 1 p 1 q 2 p 2 q 1 p 1 p 2 q 2 q 1 q 2 p 1 p 2 Teoretycznie nie wszystkie scenariusze są możliwe, np. q 2 p 1 p 2 q 1 W praktyce, niestety, taki scenariusz też może być realny, w niektórych przypadkach, ale o tym później 10
13 Wykonanie przeplatane Nic nie wiemy o względnej kolejności, ani czasie wykonania kolejnych instrukcji procesów współbieżnych. P p 1 p 2 p 3 Q q 1 q 2 q 3 Rysunek 2: Jeden z możliwych sposobów wykonania procesów P i Q metodą przeplotu. t 11
14 Ile jest możliwych przeplotów? Dla 2 wątków złożonych z 2 atomowych sekcji mamy 6 możliwych przeplotów Przy 8 sekcjach liczba ta wynosi Przy 16 już ! 12
15 Wykonanie równoległe Wykonanie równoległe (jednoczesne) nie jest prostsze 13
16 Wykonanie równoległe Wykonanie równoległe (jednoczesne) nie jest prostsze P p 1 p 2 p 3 p 4 Q q 1 q 2 q 3 q 4 t P p 1 p 2 p 3 p 4 Q q 1 q 2 q 3 q 4 Rysunek 3: Przykład dwóch jednoczesnych wykonań procesów P i Q t 13
17 Wykonanie równoległe Wykonanie równoległe (jednoczesne) nie jest prostsze P p 1 p 2 p 3 p 4 Q q 1 q 2 q 3 q 4 t P p 1 p 2 p 3 p 4 Q q 1 q 2 q 3 q 4 Rysunek 3: Przykład dwóch jednoczesnych wykonań procesów P i Q t Nic nie wiemy o względnej szybkości wykonania procesów współbieżnych wykonywanych równolegle 13
18 Poprawność Program współbieżny powinien być poprawny dla każdego możliwego przeplotu 14
19 Poprawność Program współbieżny powinien być poprawny dla każdego możliwego przeplotu Możemy założyć, że z punktu widzenia pojedynczego wątku w programie współbieżnym, jego własne instrukcje wykonywane są jak w programie sekwencyjnym zgodnie z porządkiem programu 14
20 Przykład 1. Dany jest program z procesami P i Q: int n := 0 P Q p 1 : n := n + 1 q 1 : n := n
21 Przykład 1. c.d. Jeżeli instrukcja: n := n + 1 jest atomowa, to możliwe są następujące scenariusze wykonania: Proces P Proces Q n p 1 : n := n + 1 q 1 : n := n p 1 : (koniec) q 1 : n := n p 1 : (koniec) q 1 : (koniec) 2 Proces P Proces Q n p 1 : n := n + 1 q 1 : n := n p 1 : n := n + 1 q 1 : (koniec) 1 p 1 : (koniec) q 1 : (koniec) 2 16
22 Instrukcje atomowe Instrukcje atomowe Instrukcje atomowe to instrukcje, które wykonywane są w całości bez możliwości przerwania przez instrukcje innego procesu Jeżeli dwie instrukcje atomowe wykonują się jednocześnie, to efekt jest taki jak gdyby wykonały się jedna po drugiej Lista instrukcji atomowych zależy od języka programowania w językach asemblerowych możemy z łatwością korzystać z pełnej listy rozkazów danego procesora w językach wysokiego poziomu dostępny jest jedynie pewien podzbiór instrukcji wspólnych dla różnych architektur 17
23 Instrukcje atomowe c.d. Najprostsze instrukcje atomowe to: zapis do pamięci pojedynczego słowa odczyt z pamięci pojedynczego słowa uwaga nie wszystkie zmienne mieszczą się w 1 słowie pamięci Bardziej złożone to operacje typu odczyt-modyfikacja-zapis: np. get-and-set, get-and-increment, get-and-add, compare-and-set 18
24 Zmienne atomowe pamięć globalna zapis odczyt pamięć lokalna wątek A pamięć lokalna wątek B pamięć globalna w trakcie zapisu pamięć lokalna wątek A zakończył odczyt pamięć lokalna wątek B Rysunek 4: Jednoczesna modyfikacja i odczyt zmiennej nieatomowej Jeżeli zmienna jest atomowa to operacje zapisu i odczytu z niej są zawsze dokonywane w całości. 19
25 Przykład 1. c.d. Załóżmy, że instrukcja: n := n + 1 nie jest atomowa, lecz równoważna: 1 int tmp // zmienna lokalna 2 tmp := n 3 n := tmp
26 Przykład 1. scenariusz 1 Proces P Proces Q n P.tmp Q.tmp p 1 : tmp := n q 1 : tmp := n 0?? p 2 : n := tmp + 1 q 1 : tmp := n 0 0? (koniec) q 1 : tmp := n 1 -? (koniec) q 2 : n := tmp (koniec) (koniec) Jak widać wynik jest poprawny (n = 2) 21
27 Przykład 1. scenariusz 2 Proces P Proces Q n P.tmp Q.tmp p 1 : tmp := n q 1 : tmp := n 0?? p 2 : n := tmp + 1 q 1 : tmp := n 0 0? p 2 : n := tmp + 1 q 2 : n := tmp (koniec) q 2 : n := tmp (koniec) (koniec) Na skutek przeplotu instrukcji procesów P i Q otrzymaliśmy nieprawidłowy wynik (n = 1) 22
28 Instrukcje atomowe c.d. Nawet tak prosta operacja jak inkrementacja nie musi być atomowa Poniższej funkcji w Javie 1 public void inc() { 2 ++counter; 3 } Odpowiada kod: 1 public void inc(); 2 Code: 3 0: aload_0 // Read obj. reference onto the stack 4 1: dup // Duplicate value onto the stack 5 2: getfield #2 // Load field counter:i onto the stack 6 5: iconst_1 // Push constant onto the stack 7 6: iadd // Add two values 8 7: putfield #2 // Save result to field counter:i 9 10: return Powyższy wynik można uzyskać za pomocą: javap -c YourClass.class 23
29 Rywalizacja w komputerach wieloprocesorowych Jeżeli więcej niż jeden procesor sięga jednocześnie do tego samego zasobu powstaje zjawisko rywalizacji. 24
30 Rywalizacja w komputerach wieloprocesorowych Jeżeli więcej niż jeden procesor sięga jednocześnie do tego samego zasobu powstaje zjawisko rywalizacji. Tym zasobem może być urządzenie I/O, ale przede wszystkim współdzielona pamięć Pamięć globalna magistrala Pamięć lokalna (cache) Pamięć lokalna (cache) Pamięć lokalna (cache) Pamięć lokalna (cache) CPU CPU CPU CPU Rysunek 5: Komputer wieloprocesorowy 24
31 Poprawność programów sekwencyjnych Program sekwencyjny jest poprawny, jeżeli: przekształca dane wejściowe w końcowe zgodnie z założeniami zatrzymuje się (własność stopu) 25
32 Poprawność programów współbieżnych Poprawność programów współbieżnych definiuje się za pomocą własności obliczeń, a nie wyniku końcowego. Są dwa rodzaje własności poprawności: własność bezpieczeństwa własność, która zawsze musi być prawdziwa własność żywotności własność, która w końcu musi stać się prawdziwa 26
33 Własność bezpieczeństwa Własność bezpieczeństwa mówi, że nigdy nie dojdzie w programie do niepożądanej sytuacji Innymi słowy, nic złego nigdy się nie stanie w programie, np. zmienna nie otrzyma nieprawidłowej wartości Własnością bezpieczeństwa jest wzajemne wykluczenie w dostępie do współdzielonego zasobu 27
34 Własność żywotności Własność żywotności mówi, że jeżeli proces chce coś zrobić, to mu się (ostatecznie) uda Brak żywotności może manifestować się na dwa sposoby: Zakleszczanie (ang. deadlock) w tym przypadku w programie nic się nie dzieje, ponieważ wszystkie wątki oczekują na zajście zdarzenia, które nigdy nie zajdzie, np. zwolnienie blokady (zamka, ang. lock) posiadanej przez inny wątek Często wyróżnia się zakleszczenie aktywne (ang. livelock) stan wątków się zmienia, ale nie ma postępu obliczeń Zagłodzenie (ang. starvation) lokalny brak żywotności część procesów pracuje normalnie, ale niektóre nie mogą wykonać pracy 28
35 Poprawność programu współbieżnego Poprawny program współbieżny Program współbieżny jest poprawny, jeżeli dla każdego możliwego przeplotu ma własności bezpieczeństwa i żywotności. W celu pokazania, że program jest niepoprawny wystarczy wskazać jeden scenariusz jego wykonania, w którym własność bezpieczeństwa lub żywotności jest naruszona. 29
36 Niezagłodzenie Brak zagłodzenia to pożądana właściwość, ale słabsza od pozostałych w praktyce przydatne, gdy występuje duża rywalizacja (ang. contention) między wątkami własność ta nie określa jak długo wątek musi czekać musi być gwarancja, że kiedyś ruszy z miejsca 30
37 Tworzenie wątków w Javie W celu utworzenia wątku w Javie mamy dwie podstawowe opcje: dziedziczenie po klasie Thread implementacja interfejsu Runnable 31
38 Klasa Thread 1 public class Watek extends Thread { 2 public Watek(String nazwa) { 3 setname(nazwa); // Ustaw nazwę wątku 4 // domyślnie jest "Thread-nr" 5 } 6 public void run() { 7 // główna metoda wątku 8 System.out.println("Pozdrowienia z wątku: " + getname()); 9 } 10 public static void main(string [] args) { 11 for (int i = 0; i < 8; ++i) { 12 Watek t = new Watek("Wątek " + i); 13 t.start(); 14 } 15 } 16 } 32
39 Klasa Thread c.d. Przykładowy wynik wykonania programu: 1 Pozdrowienia z wątku: Wątek 0 2 Pozdrowienia z wątku: Wątek 3 3 Pozdrowienia z wątku: Wątek 1 4 Pozdrowienia z wątku: Wątek 2 5 Pozdrowienia z wątku: Wątek 5 6 Pozdrowienia z wątku: Wątek 4 7 Pozdrowienia z wątku: Wątek 6 8 Pozdrowienia z wątku: Wątek 7 33
40 Klasa Thread c.d. Ponowne uruchomienie zwróciło inny wynik: 1 Pozdrowienia z wątku: Wątek 1 2 Pozdrowienia z wątku: Wątek 2 3 Pozdrowienia z wątku: Wątek 0 4 Pozdrowienia z wątku: Wątek 3 5 Pozdrowienia z wątku: Wątek 4 6 Pozdrowienia z wątku: Wątek 5 7 Pozdrowienia z wątku: Wątek 6 8 Pozdrowienia z wątku: Wątek 7 34
41 Interfejs Runnable 1 package zegar; 2 class Zegar implements Runnable { 3 private volatile boolean czyzatrzymac = false; 4 public void run() { 5 int sek = 0; 6 while (!czyzatrzymac) { 7 try { 8 Thread.sleep(1000); // uśpij wątek 1 sekundę 9 ++sek; 10 } catch (InterruptedException e) { 11 System.out.println("Wątek został przerwany!"); 12 } 13 System.out.println("Upłynęło " + sek + " sek."); 14 } 15 } 16 public void zatrzymaj() { 17 czyzatrzymac = true; 18 } 19 } 35
42 Interfejs Runnable c.d. 1 package zegar; 2 class ZegarApp { 3 public static void main(string [] args) { 4 // wykonywane przez wątek główny aplikacji 5 Zegar z = new Zegar(); 6 new Thread(z).start(); 7 try { 8 Thread.sleep(5 * 1000); // uśpij główny wątek 9 } catch (InterruptedException e) { 10 } 11 z.zatrzymaj(); // bez tego program się nie zakończy 12 } 13 } 36
43 Różnice Implemetacja interfejsu, gdy klasa już dziedziczy po innej klasie Dziedziczenie po klasie Thread, jeżeli chcemy zmodyfikować jej metody Preferowane jest stosowanie interfejsu Runnable 37
44 Runnable uwagi Klasa implementująca Runnable może odwołać się do powiązanej instancji Thread za pomocą metody Thread.currentThread(), co umożliwia wykonywanie operacji jak w przypadku dziedziczenia po klasie Thread 1 class Worker implements Runnable { 2 public void run() { 3 String threadname = Thread.currentThread().getName(); 4 System.out.println("Hello from " + threadname); class Worker extends Thread { 2 public void run() { 3 String threadname = this.getname(); 4 System.out.println("Hello from " + threadname);
45 Kiedy program się kończy Program w javie kończy się, gdy: wszystkie wątki niebędące demonami (wątki usług) zakończyły działanie dojście do końca wykonania metody run() rzucenie wyjątku w metodzie run() została wykonana metoda Runtime.exit() 39
46 Kończenie pracy wątku Nie powinno się korzystać z metody stop() może to doprowadzić do pozostawienia modyfikowanych przez wątek obiektów w niepoprawnym (niespójnym) stanie Prawidłowe kończenie pracy wątku powinno się odbywać za pomocą sprawdzania warunku opartego np. na zmiennej ulotnej: 1 volatile boolean czyzakonczyc = false; public void run () { while(!czyzakonczyc) { } 8 }... lub za pomocą mechanizmu przerwań 40
47 Kończenie pracy wątku przerwania 1 class Worker2 implements Runnable { 2 public void run() { 3 while (!Thread.currentThread().isInterrupted()) { 4 System.out.println("Hello :)"); 5 try { 6 Thread.sleep(10000); // 10 sek. 7 } catch (InterruptedException ex) { 8 System.out.println("Wykonanie wątku przerwane"); 9 Thread.currentThread().interrupt(); // Przywróć flagę przerwania 10 } 11 } 12 } 13 } public static void main(string [] args) { 16 Thread w2 = new Thread(new Worker2()); 17 w2.start(); 18 Thread.sleep(1000); 19 w2.interrupt(); // Wymuś zakończenie wątku po 1 sek. 41
48 Przykład 2. - bankomat Wyobraźmy sobie system do obsługi Bankomatów Klasa Konto odpowiedzialna jest za aktualizację stanu konta Klasa Bankomat umożliwia wypłatę pieniędzy z konta Jest jedna instancja klasy Konto, ale wiele instancji klasy Bankomat Załóżmy, że możliwe jest jednoczesne wypłacanie pieniędzy z różnych bankomatów (2 karty debetowe) 42
49 Przykład 2. 1 class Konto { 2 private int stan = 0; 3 4 public Konto(int depozyt) { 5 stan = depozyt; 6 } 7 8 public boolean pobierz(int kwota) { 9 if (stan >= kwota) { 10 stan -= kwota; 11 return true; 12 } 13 return false; 14 } 15 public String tostring() { 16 return String.valueOf(stan); 17 } 18 } 43
50 Przykład 2. c.d. 1 class Bankomat implements Runnable { 2 final Konto konto; 3 final String id; 4 public Bankomat(Konto konto, String id) { 5 this.konto = konto; 6 this.id = id; 7 } 8 public void run() { 9 int pobrane = 0; 10 final int kwota = 100; 11 for (int i = 0; i < 10; ++i) { 12 if (konto.pobierz(kwota)) { 13 pobrane += kwota; 14 } 15 try { 16 Thread.sleep(100); 17 } catch (InterruptedException e) { } 18 } 19 System.out.printf("Bankomat %s, pobrana kwota: %d zł\n", id, pobrane); 20 } 21 } 44
51 Przykład c.d. 1 public class RownoleglaModyfikacja { 2 public static void main(string [] args) { 3 final Konto konto = new Konto(10000); 4 Thread [] watki = new Thread[2]; 5 for (int i = 0; i < 2; ++i) { 6 watki[i] = new Thread(new Bankomat(konto, "nr " + i)); 7 watki[i].start(); 8 } 9 try { 10 for (int i = 0; i < 2; ++i) { 11 watki[i].join(); // czekaj na zakończenie 12 } 13 } catch (InterruptedException e) { 14 System.out.println("Wątek przerwany"); 15 } 16 System.out.println("Stan konta: " + konto); 17 } 18 } 45
52 Przykładowe wykonanie programu Wynik przykładowego wykonania programu na komputerze z dwurdzeniowym procesorem: 1 Bankomat nr 1, pobrana kwota: 1000 zł 2 Bankomat nr 0, pobrana kwota: 1000 zł 3 Stan konta: 8000 Program uruchomiony ponownie na tym samym komputerze: 1 Bankomat nr 0, pobrana kwota: 1000 zł 2 Bankomat nr 1, pobrana kwota: 1000 zł 3 Stan konta: 8200 (!) 46
53 Analiza Przedstawiony program ilustruje problem wyścigu w dostępie do danych (ang. data race) Oba wątki odczytują i modyfikują stan ten sam współdzielony obiekt konto Nie zawsze udaje się łatwo wykryć błąd w programie współbieżnym przy pierwszym uruchomieniu program dał poprawny wynik niedeterminizm To czy pojawi się problem zależy od sposobu przydziału czasu procesora poszczególnym wątkom przez planistę (ang. scheduler) 47
54 Analiza Proces 1. 1 Stan konta w kroku 0 = Stan konta w kroku 1 = Stan konta w kroku 2 = Stan konta w kroku 3 = Stan konta w kroku 4 = Stan konta w kroku 5 = Stan konta w kroku 6 = Stan konta w kroku 7 = Stan konta w kroku 8 = Stan konta w kroku 9 = 8400 Proces 2. rozpoczyna 1 Stan konta w kroku 0 = Stan konta w kroku 1 = Stan konta w kroku 2 = Stan konta w kroku 3 = Stan konta w kroku 4 = Stan konta w kroku 5 = Stan konta w kroku 6 = Stan konta w kroku 7 = Stan konta w kroku 8 = Stan konta w kroku 9 =
55 Analiza c.d. konto 9700 Pamięć globalna odczyt magistrala Pamięć podręczna (cache) Rejestry CPU Pamięć podręczna (cache) Rejestry CPU CPU1 CPU2 49
56 Analiza c.d. konto 9700 Pamięć globalna magistrala 9600 Pamięć podręczna (cache) Rejestry CPU 9600 Pamięć podręczna (cache) Rejestry CPU Modyfikacja CPU1-100 CPU2 50
57 Analiza c.d. konto 9600 albo 9600 Pamięć globalna magistrala Pamięć podręczna (cache) Rejestry CPU Pamięć podręczna (cache) Rejestry CPU CPU1 CPU2 51
58 Analiza c.d. Problem wynika z faktu, że aktualizacja współdzielonego stanu konta składa się z kilku instrukcji: odczytu, modyfikacji i zapisu Operacje te muszą być wykonywane w sposób wyłączny i niepodzielny przez każdy z procesorów, czyli zgodnie z zasadą wzajemnego wykluczania 52
59 Sekcja krytyczna Instrukcje wykonywane na zmiennych współdzielonych tworzą sekcję krytyczną. Instrukcje wykonywane przez wątek na zmiennych lokalnych niewpływające na stan globalny noszą nazwę sekcji lokalnej W każdym momencie tylko jeden wątek może znajdować się w sekcji krytycznej. W programie może być wiele niepowiązanych ze sobą sekcji krytycznych Konieczna jest synchronizacja dostępu do sekcji krytycznych, tak aby zapewnić wzajemne wykluczanie wątków / procesów 53
60 Synchronizacja dostępu do współdzielonych zasobów Jednym ze sposobów zapewnienia synchronizacji dostępu do sekcji krytycznych w Javie jest zastosowanie konstrukcji synchronized (gruboziarnista synchronizacja) Synchronizowane mogą być zarówno całe metody, jak i wybrane bloki instrukcji (drobnoziarnista synchronizacja) 54
61 Przykład 2. poprawiony Synchronizacja metody: 1 class Konto { 2 private int stan = 0; public synchronized boolean pobierz(int kwota) { 5 boolean wynik = false; 6 if (stan >= kwota) { 7 stan -= kwota; 8 wynik = true; 9 } 10 return wynik; 11 } 12 } 55
62 Przykład 2. poprawiony Synchronizacja bloku: 1 class Konto { 2 private int stan = 0; public boolean pobierz(int kwota) { 5 boolean wynik = false; 6 synchronized(this) { 7 if (stan >= kwota) { 8 stan -= kwota; 9 wynik = true; 10 } 11 } 12 return wynik; 13 } 14 } 56
63 Przykład 2. Synchronizacja bloku wersja alternatywna: 1 class Bankomat implements Runnable { 2 final Konto konto; 3 final String id; public void run() { 6 int pobrane = 0; 7 final int kwota = 100; 8 for (int i = 0; i < 10; ++i) { 9 synchronized(konto) { 10 if (konto.pobierz(kwota)) { 11 pobrane += kwota; 12 } 13 } 14 try { 15 Thread.sleep(100); 16 } catch (InterruptedException e) { } 17 } 18 } 19 } 57
64 Zmienne i instrukcje atomowe w Javie Instrukcje odczytu i zapisu zmiennych typów podstawowych oprócz long i double są atomowe (dokonują się w całości) Instrukcje odczytu i zapisu zmiennych oraz referencji do obiektów i tablic oznaczonych jako ulotne słowem kluczowym volatile są atomowe Implementacje zmiennych (rejestrów) atomowych typu odczyt-modyfikacja-zapis dostępne w pakiecie java.util.concurrent.atomic AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference AtomicIntegerArray, AtomicLongArray 58
65 Cykl życia wątku Nowy (Created) start() Object.notify()/ Object.notifyAll() Object.wait() Czekający (Waiting) Zakończon oczekiwanie/ Thread.interrupt() Gotowy do pracy (Runnable) Thread.sleep() Uśpiony (Sleeping) Przydział procesora (scheduler) stop() Odebranie procesora/ Thread.yield() Martwy (Dead) return;/ wyjątek Aktywny (Running) Wejście do sekcji krytycznej/ oczekiwanie na urz. I/O Blokady przyznane/ pobrano dane z urz. I/O Zablokowany (Blocked) Rysunek 6: Cykl życia wątku (uproszczony). 59
66 Cykl c.d Nowy obiekt wątku został utworzony, ale wątek nie został jeszcze uruchomiony (metoda start()) Gotowy do pracy po wykonaniu metody start(), oczekiwanie na przydział procesora przez algorytm szeregujący (inaczej planista, ang. scheduler) Aktywny wątek, który uzyskał przydział procesora. Wyjście ze stanu aktywności może nastąpić przez: zakończenie wykonywania metody run() próbę wejścia do sekcji krytycznej, w której znajduje się inny wątek wywołanie metod takich jak wait(), sleep(), yield() 60
67 Cykl c.d. Zablokowany wątek, który był aktywny staje się zablokowany, gdy oczekuje na zwolnienie blokad przez inne wątki lub czeka na wykonanie opreacji wejścia/wyjścia Oczekujący po wykonaniu metody java.lang.object.wait() na wybranym obiekcie wątek przechdzi w stan czekania (wait), z którego może wyjść po wywołaniu przez inny wątek metody notify() lub metody notifyall() na tym obiekcie notify() wybudza jeden z oczekujących wątków, które wcześniej wywołały notify() na danym obiekcie notifyall() wybudza wszystkie oczekujące wątki (przechodzą do stanu gotowości) 61
68 Cykl c.d. Uśpiony wątek, który wywołał metodę sleep() i nie upłynął jeszcze zadany kwant czasu wątek może zostać wybudzony przez wywołanie metody interrupt(), co powoduje rzucenie wyjątku klasy InterruptedException po zakończeniu oczekiwania wątek przechodzi do stanu gotowości, a nie aktywności Zakończony (martwy) wątek, który zakończył wykonywanie metody run() lub został przerwany przez nieobsłużony wyjątek lub metodę stop()/terminate() 62
69 Zarządzanie przydziałem procesora Cechy podstawowe: JVM stosuje algorytm szeregujący z wywłaszczeniem Kolejność przyznawania czasu procesora zależy od priorytetu wątku Każdy wątek ma określony priorytet, wykonywany jest wątek o najwyższym priorytecie Jeżeli dwa wątki mają taki sam priorytet uruchamiane są w kolejności FIFO (ang. first in, first out) 63
70 Priorytety wątków JVM wybiera wątek o najwyższym priorytecie do wykonania Priorytety mają zakres od 1 (najniższego, Thread.MIN PRIORITY) do 10 (najwyższego, Thread.MAX PRIORITY) Domyślny priorytet to Thread.NORM PRIORITY Nowo tworzony wątek przyjmuje domyślnie priorytet wątku, w którym został utworzony 64
Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego
Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować
Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Język Java wątki (streszczenie)
Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:
Programowanie komputerów
Programowanie komputerów Wykład 7: Programowanie wielowątkowe w Javie dr inż. Walery Susłow Współbieżność Programy współbieżne (concurrent software) aplikacje potrafiące wykonywać kilka operacji w tym
Współbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1
Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego
Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003
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
Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().
Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public
Kurs programowania. Wykład 8. Wojciech Macyna
Wykład 8 Program bez watków, jeden procesor, trzy zadania Program z watkami, jeden procesor, trzy zadania Procesory wielordzeniowe, każde zadanie na osobnym procesorze Trzy zadania uruchomione w watkach
Języki i Techniki Programowania II. Wykład 7. Współbieżność 1
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
Język Java wątki (streszczenie)
Programowanie współbieŝna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Podstawowe pojęcia: procesy
Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017
Wykład 8 10 maj 2017 Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki.
Java. Programowanie Obiektowe Mateusz Cicheński
Java Programowanie Obiektowe Mateusz Cicheński Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja
Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Uruchomienie programu powoduje stworzenie nowego procesu przez system operacyjny. Proces wykonywany program wraz
Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.
Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)
WSPÓŁBIEŻNOŚĆ. MATERIAŁY:
WSPÓŁBIEŻNOŚĆ ZAGADNIENIA: procesy, wątki, synchronizacja, synchronizacja w Java 5.0 blokady, egzekutory, zbiory wątków MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/concurrency/ HTTP://USERS.UJ.EDU.PL/~CIESLA/
Podstawy współbieżności
Podstawy współbieżności Algorytmy i struktury danych. Wykład 6. Rok akademicki: 2010/2011 Od koncepcji współbieżności do systemów rozproszonych Współbieżnośd rozważany na poziomie koncepcyjnym sposób realizacji
Wątki w Javie. Piotr Tokarski
Wątki w Javie Piotr Tokarski Wprowadzenie Co to są wątki? Co to są wątki? Każdy program ma przynajmniej jeden wątek Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować
Aplikacje w Javie- wykład 11 Wątki-podstawy
1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/
Programowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 1 dr inż. Literatura ogólna Ben-Ari, M.: Podstawy programowania współbieżnego i rozproszonego. Wydawnictwa Naukowo-Techniczne, Warszawa, 2009. Czech, Z.J:
Współbieżność w Javie
Wielowątkowość (obsługa wątków) Tworzenie wątków Stany wątków i ich zmiana Demony Grupy wątków Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych pakiet java.util.concurrent
procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak
Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Abstrakcja programowania współbieżnego Instrukcje atomowe i ich przeplot Istota synchronizacji Kryteria poprawności programów współbieżnych
Współbieżność w Javie
Wielowątkowość (obsługa wątków) Tworzenie wątków Stany wątków i ich zmiana Demony Grupy wątków Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych pakiet java.util.concurrent
Wprowadzenie do programowania współbieżnego
Wprowadzenie do programowania współbieżnego Marcin Engel Instytut Informatyki Uniwersytet Warszawski Zamiast wstępu... Zamiast wstępu... Możliwość wykonywania wielu akcji jednocześnie może ułatwić tworzenie
Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone W1. Wielowątkowość Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np.
Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4
Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.
Programowanie współbieżne Wykład 7. Iwona Kochaoska
Programowanie współbieżne Wykład 7 Iwona Kochaoska Poprawnośd programów współbieżnych Właściwości związane z poprawnością programu współbieżnego: Właściwośd żywotności - program współbieżny jest żywotny,
Programowanie współbieżne Wykład 5. Rafał Skinderowicz
Programowanie współbieżne Wykład 5 Rafał Skinderowicz Monitory motywacje Mechanizmy synchronizacji takie jak blokady (zamki) semafory pozwalają efektywnie rozwiązywać dostępu do współdzielonych zasobów,
Programowanie wielowątkowe. Tomasz Borzyszkowski
Programowanie wielowątkowe Tomasz Borzyszkowski Wątki a procesy Jako jeden z niewielu języków programowania Java udostępnia użytkownikowi mechanizmy wspierające programowanie wielowątkowe. Program wielowątkowy
Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.
Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).
Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Zaawansowane programowanie w C++ (PCP)
Wykład 10 - boost Thread. 8 czerwca 2007 Równoległość bardzo wolna reakcja człowieka wolne urządzenia wejścia - wyjścia (np. drukarki) bardzo szybkie procesory można przeprowadzać obliczenia podczas obsługi
Model pamięci. Rafał Skinderowicz
Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej
Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności 1.1 Motywacja Przewiduje się że w dalszej perspektywie głównym motorem wzrostu mocy przetwarzania komputerów
Programowanie współbieżne Laboratorium nr 12
Programowanie współbieżne Laboratorium nr 12 Uwaga!!! Wyniki uruchomionych programów mogą zależeć od sprzętu (ilość procesorów, rdzeni itp.), systemu operacyjnego, obciążenia systemu operacyjnego, ilości
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Programowanie wielowątkowe: podstawowe koncepcje, narzędzia w Javie. J. Starzyński, JiMP2, rok akad. 2005/2006
Programowanie wielowątkowe: podstawowe koncepcje, narzędzia w Javie J. Starzyński, JiMP2, rok akad. 2005/2006 Tematyka Wprowadzenie Podstawowe pojęcia Tworzenie i uruchamianie wątków Zatrzymywanie wątków
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013
Programowanie współbieżne i równoległe dr inż. Marcin Wilczewski 2013 1 Tematyka wykładu Wprowadzenie. Podstawowe pojęcia Wątki i procesy. Metody i modele synchronizacji Klasyczne problemy współbieżne
Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 11 11.1 abstrakcyjne Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post
WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska
WIELOWĄTKOWOŚĆ Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska Wydajność 2 Do 2005 roku wydajność komputerów poprawiano zwiększając częstotliwość taktowania procesora 1995: Pentium
1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 4 Synchronizacja procesów (i wątków) cześć I Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Potrzeba synchronizacji Procesy wykonują się współbieżnie. Jeżeli w 100% są
Interfejsy w Java. Przetwarzanie równoległe. Wątki.
Informatyka I Interfejsy w Java. Przetwarzanie równoległe. Wątki. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Interfejsy w Java Pojęcie interfejsu w programowaniu Deklaracja
Systemy Rozproszone - Ćwiczenie 4
Systemy Rozproszone - Ćwiczenie 4 1 Synchronizacja wątków: myjnia samochodowa Poniżej znajduje się przykład ilustrujący klasyczny problem synchronizacji wątków. Obiekt klasy Car jest współdzielony przez
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów
Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 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ę.
Multimedia JAVA. Historia
Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania
Programowanie współbieżne Wykład 2. Iwona Kochańska
Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas
Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1
Przetwarzanie wielowątkowe przetwarzanie współbieżne Krzysztof Banaś Obliczenia równoległe 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe)
Przetwarzanie równoległe i współbieżne
Wątki Threads Wątki (Threads) Concurrent programming is like stepping into an entirely new world and learning a new programming language!!! (grząski grunt) Unikaj jeśli możesz rozwiazać problem! Implementacja
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
6. Wątki 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 W. Kasprzak: Programowanie zdarzeniowe 6-1 6.1 Wątki programu 1) Pojęcie
Programowanie współbieżne Laboratorium nr 11
Programowanie współbieżne Laboratorium nr 11 Wykonywane w danym momencie programy nazwano procesami [1] - izolowanymi, niezależnie wykonywanymi programami, dla których system operacyjny przydzielał pamięć,
Wielowątkowość 1. Marcin Orchel. AGH University of Science and Technology in Poland 1 / 58
Wielowątkowość 1 Marcin Orchel AGH University of Science and Technology in Poland 1 / 58 Section 1 Agenda Agenda 2 / 58 1 Współbieżność 2 Synchronizacja 3 Zbiory oczekujące Agenda 3 / 58 Section 2 Współbieżność
Programowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
1 Podstawowe definicje i pojęcia współbieżności
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności 1.1 Dlaczego zajmujemy się współbieżnością? W ciągu ostatnich 30 lat wzrost mocy przetwarzania osiągano
Zaawansowany kurs języka Python
Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest
Mogą pracować w środowisku: Scentralizowanym -mikrokontroler Rozproszonym sieć sterująca, systemy hierarchiczne. Komunikacja z syst.
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów
Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów
Generatory. Michał R. Przybyłek
Generatory Michał R. Przybyłek 1 Wstęp Generator to potencjalnie nieskończony, leniwie obliczany, ciąg wartości. W zależności od tego, która ze stron decyduje o wygenerowaniu nowej wartości wyróżniamy
Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
Java SE, Laboratorium nr 8 Wątki
Java SE, Laboratorium nr 8 Wątki Wątki w Jawie umożliwiają współbieżność operacji. Wątki umożliwiają równoległe wykonywanie instrukcji. Wątki wymagają mniej zasobów niż osobne procesy. Wynika to z tego,
Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.
Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,
SYSTEMY OPERACYJNE WYKLAD 6 - procesy
Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - procesy Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 Zasoby: PROCES wykonujący się program ; instancja programu
Dokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Programowanie wielowątkowe. Jarosław Kuchta
Programowanie wielowątkowe Jarosław Kuchta Procesy i wątki w systemie Windows Windows jest systemem wielowątkowym. Każdy proces ma przynajmniej jeden wątek, chociaż może mieć wiele wątków. Start programu,
Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne
Synchronizacja procesów Przeplot Przeplot wątków współbieżnych Cel i metody synchronizacji procesów Problem sekcji krytycznej Semafory Blokady 3.1 3.3 Wątki współbieżne Cel i metody synchronizacji procesów
Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like
Wątki (Threads) Concurrent programming is like stepping into an entirely new world and learning a new programming language!!! (grząski grunt) Unikaj jeśli moŝesz! Oparte są zwykle na wielozadaniowym SO
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 5 Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wady semaforów Jeden z pierwszych mechanizmów synchronizacji Generalnie jest to mechanizm bardzo
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Wstęp do programowania 2
Wstęp do programowania 2 wykład 10 Zadania Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Współbieżność dotychczasowe programy wykonywały akcje sekwencyjnie Ada umożliwia
Programowanie obiektowe
Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami
Języki i metody programowania Java INF302W Wykład 2 (część 1)
Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................
5. Model komunikujących się procesów, komunikaty
Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć
Programowanie współbieżne Rozwiązywanie problemu wzajemnego wykluczania. Rafał Skinderowicz
Programowanie współbieżne Rozwiązywanie problemu wzajemnego wykluczania Rafał Skinderowicz Wady protokołów WW z zastosowaniem atomowych rejestrów RW Rozwiązywanie problemu wzajemnego wykluczania za pomocą
Programowanie obiektowe
Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć
DYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Model pamięci. Rafał Skinderowicz
Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej
Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński
Java - wprowadzenie Programowanie Obiektowe Mateusz Cicheński O języku Czym jest Java Cechy charakterystyczne języka Przykładowe zastosowania Składnia języka Podstawowe typy Wybrane słowa kluczowe Plan
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera
1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?
1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)? public static void test1() { Object[] o = new Object[] { "1", "2", "3" ; List l = new ArrayList(Arrays.asList(o));
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Programowanie współbieżne i rozproszone w języku Java
Programowanie współbieżne i rozproszone w języku Java Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Programowanie współbieżne i rozproszone w języku
Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13
Klasy Klasa to grupa obiektów, które mają wspólne właściwości, a obiekt jest instancją klasy. Klasa w języku Java może zawierać: pola - reprezentują stan obiektu (odniesienie do pola z kropką), methods
W Javie wątki są obiektami zdefiniowanymi za pomocą specjalnego rodzaju klas.
WspółbieŜność W programowaniu sekwencyjnym, kaŝdy program ma początek, sekwencje instrukcji do wykonania i koniec. W kaŝdym momencie działania programu moŝemy wskazać miejsce, w którym znajduje się sterowanie.
Procesy, wątki i zasoby
Procesy, wątki i zasoby Koncepcja procesu i zasobu, Obsługa procesów i zasobów, Cykl zmian stanów procesu i kolejkowanie, Klasyfikacja zasobów, Wątki, Procesy i wątki we współczesnych systemach operacyjnych.
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Metody Metody, parametry, zwracanie wartości
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Aplikacja wielowątkowa prosty komunikator
Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host
Java: interfejsy i klasy wewnętrzne
Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac