Konkurentné programovanie

Podobné dokumenty
Konkurentné programovanie

enum

PowerPoint Presentation

Identity Lifecycle Management

História

PowerPoint Presentation

Funkcionálne programovanie Cvičenie 9 Funkcionálne programovanie v Jave Sergej Chodarev 22. november 2017 Technická Univerzita v Košiciach

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Microsoft PowerPoint - OOP_prednaska_10.pptx

User:Andrej Sedlacek

PDS01

Objektovo orientované programovanie

Identity Lifecycle Management

midterm2014_1

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

DediĊnosť

Algoritmizácia a programovanie - Príkazy

Teória pravdepodobnosti Zákony velkých císel

Tomáš Jelínek - včely vyhľadávanie

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

Import absencí z ASC

Snímka 1

1 Rekurencie este raz riesenia niektorych rekurencii z cvik. mame danu rekurenciu napr T (n) = at ( n b ) + k. idea postupu je postupne rozpisovat cle

Agenda záverečnej práce pedagóg Celá agenda týkajúca sa záverečnej práce je dostupná v obrazovke Záverečná práca (menu Agenda pedagóga -> Záverečné pr

Používateľská príručka POUŽÍVATEĽSKÁ PRÍRUČKA Generátor XML dávok pre Informačný systém kontrolných známok z MS Excel šablóny Dátum: Verzia

03_ControlFlow.dvi

Identity Lifecycle Management

2.5. Dotyčnica krivky, dotykový kužeľ. Nech f je krivka a nech P V (f) (t.j. m P (f) 1). Ak m P (f) = r a l je taká priamka, že I P (f, l) > r, potom

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

PowerPoint Presentation

Microsoft Word - 06b976f06a0Matice - Uzivatelska Dokumentacia

Identity Lifecycle Management

Návod na vytvorenie kvalifikovaného elektronického podpisu prostredníctvom občianskeho preukazu s čipom Dátum zverejnenia: Verzia: 1 Dátu

Microsoft Word shm_ popadic.doc

Microsoft PowerPoint - Prog_p08.ppt

Obsah: 1. Registrácia do aplikácie Živá lúka online 2. Prihlásenie sa do aplikácie Živá lúka online 3. Všeobecné poznámky k mapovému podkladu 5. Rola:

Súťaž Vráťme knihy do škôl je tu už po 8-krát! O súťaži Občianske združenie Učenie s úsmevom v spolupráci s partnermi internetové kníhkupectvo abcknih

Úvodná prednáška z RaL

Matej Kendera - PDF, word, lucene, java

Pokrocilé programovanie II - Nelineárne iteracné schémy, chaos, fraktály

Inteligentné rozhodovacie systémy Heuristické prehľadávanie SP Október, 2018 Katedra kybernetiky

Xesar Softvér Stručný návod

Multithreading a komunikácia medzi procesmi a threadmi, Časová závislosť, kritická sekcia a vzájomné vylúčenie, súvislosti medzi týmito pojmami Riešen

Microsoft Word - Algoritmy a informatika-priesvitky02.doc

ŤAHÁK PRAKTICKÁ ČASŤ Prerekvizity: LINUX: WINDOWS: Inštalácia Oracle VirtualBoxu a vytvorenie virtuálneho stroja /návod nižšie/ Operačný system Window

NÁVRH UČEBNÝCH OSNOV PRE 1

Prezentace aplikace PowerPoint

Microsoft Word - Priloha_1.docx

PowerPoint-Präsentation

0022-vub-mobilne-tokeny-200x200-v03.indd

Výnimky

N desitka.indd

midterm2019

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

Praktické paralelné programovanie v jazykoch C# 4.0 a C++

sprievodca_exp.pdf

Neineárne programovanie zimný semester 2018/19 M. Trnovská, KAMŠ, FMFI UK 1

Manuál pre nastavenie tlače z VRP elio m500 Elio m500 Manuál pre nastavenie tlače -1-

Microsoft Word - manual_ESS_2010

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Digidown PDF

Balíčkovanie FreeSWITCH-u pre Debian Autor: Zdenko Holeša, InžProjekt 1, KIS FRI ŽU Predkompilované balíčky Predkompilované balíčky existujú pre Debia

Poznámky k cvičeniu č. 2

MO_pred1

Relačné a logické bázy dát

Prístup a Nastavenie pre KOMPAKT HOSTING

gis5 prifuk

Omega podvojné účtovníctvo Súhrnný výkaz k dani z pridanej hodnoty Je to výkaz, ktorý musia podávať platitelia dane z pridanej hodnoty (registrovaní p

PowerPoint Presentation

Ponuka Štart

Microsoft PowerPoint - SLIDES_02DTD.ppt

Pracovný postup pre vypĺňanie údajov elektronického formulára IŠIS pre spravodajskú jednotku 1

Axióma výberu

Paralelné algoritmy, cast c. 2

VTO1210C-X Užívateľský manuál Užívateľský manuál VTO1210 C-X

Prihláška na vysokoškolské štúdium bakalárske prvý stupeň alebo spojené prvý a druhý stupeň v jednom celku 1) Pečiatka VŠ, fakulty: Evidenčné číslo: A

Paralelné algoritmy, cast c. 3

8 Cvičenie 1.1 Dokážte, že pre ľubovoľné body X, Y, Z platí X + Y Z = Z + Y X. 1.2 Dokážte, že pre ľubovoľné body A, B, D, E, F, G afinného priestoru

Príručka pre používateľa bezpečnostného tokenu EZIO Pico Obsah: 1 Určenie 1 2 Popis produktu 1 3 Nesprávne zadaný PIN kód (PIN FAIL) 3 4 Použitie Aute

OPIdS - finančné riadenie

Privátna zóna pre prevádzku Obsah Privátna zóna pre prevádzku 1 Obsah 1 Webová stránka 2 Úvodná stránka 2 Registrácia prevádzka/penzión

Prevádzka

Stravné - přecenění

EURÓPSKA KOMISIA V Bruseli C(2019) 1907 final ANNEX PRÍLOHA k NARIADENIU KOMISIE (EÚ) / z XXX, ktorým sa vykonáva nariadenie Európskeho pa

Snímka 1

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Dátové rozhranie pre externý subjekt FR SR Strana 1 z 11 Dátové rozhranie

PowerPoint Presentation

Microsoft Word - skripta3b.doc

Chránené a dôverné Posledná aktualizácia: 16. apríla 2019 Johns Manville Oznámenie o ochrane osobných údajov žiadateľa o zamestnanie v EÚ Platné od: 1

Stravné - přecenění

ZÁSADY OCHRANY OSOBNÝCH ÚDAJOV v zmysle zákona 18/2018 Z.z. o ochrane osobných údajov, (ďalej len Zákon ) a Nariadenia Európskeho parlamentu a rady čí

Microsoft Word _1_.docx

Princípy tvorby softvéru Programovacie paradigmy

Prepis:

KONKURENTNÉ PROGRAMOVANIE 4. cvičenie: Konkurentné kolekcie

Stav objektu/triedy Stav objektu je uložený v jeho inštančných premenných Stav triedy je uložený v jej statických premenných Stav objektu môže mať definované obmedzenia početkolies musí byť nezáporný a konečný ak pohlavie== žena, rodnéčíslo musí mať 4. cifru 5 alebo 6 Stav = stavové premenné + obmedzenia

Konzistentnosť stavu Konzistentný stav je podstatou vláknovej bezpečnosti Spôsoby na zachovanie konzistentnosti stavu cez vlastníctvo stavu: nezdieľať stav medzi vláknami (čítanie ani zmena) sprístupňovať konečný/nemenný stav celý stav realizovať prostredníctvom thread-safe stavovej premennej premenlivý stav, ktorý nie je sám o sebe thread-safe, strážiť tým istým zámkom vždy, keď sa k nemu pristupuje (čítanie aj zmena)

Viachodnotový stav Ak nemám žiadne obmedzenia a nezávislé premenné, môžem delegovať vláknovú bezpečnosť na vláknovo bezpečné stavové objekty public class VisualComponent { private final List<KeyListener> keylisteners = new CopyOnWriteArrayList<KeyListener>(); private final List<MouseListener> mouselisteners = new CopyOnWriteArrayList<MouseListener>(); public void addkeylistener(keylistener listener) { keylisteners.add(listener); public void addmouselistener(mouselistener listener) { mouselisteners.add(listener);...

Viachodnotový stav Ak máme obmedzenia alebo závislé stavové premenné, delegácia nefunguje @NotThreadSafe public class Interval { private final AtomicInteger lower = new AtomicInteger(0); private final AtomicInteger upper = new AtomicInteger(0); public void setlower(int i) { if (i <= upper.get()) lower.set(i); public void setupper(int i) { if (i >= lower.get()) upper.set(i);... neatomická operácia check-then-act

Synchronizované kolekcie Všetko sú to thread-safe triedy Riešenie vláknovej bezpečnosti cez synchronizované metódy zamknutie cez synchronized(this) napr. Vector, HashTable ľubovoľná kolekcia obalená cez niektorý zo synchronizovaných pohľadov: Collections.synchronizedXxx(Xxx xxx) Napr. synchronizedset, synchronizedlist,

Rozsah vláknovej bezpečnosti Z definície vláknovej bezpečnosti: Konkurentné volanie metód na vláknovo bezpečnom objekte neporuší konzistentnosť stavu tohto objektu Ak je objekt thread-safe, nemusí to znamenať bezstarostné používanie pre volajúci kód bez ďalšej synchronizácie Vždy sa treba pozrieť do dokumentácie (ak existuje) Typické problémy volanie viacerých metód po sebe iterovanie cez kolekciu

Client-side zamykanie Ak thread-safe trieda využíva zamykanie cez synchronizované metódy Zamkneme viacnásobné volania metód alebo iterácie cez rovnaký kľúč teda cez referenciu na objekt Že je to OK, by sme mali zistiť z dokumentácie Synchronizovaná kolekcia public static Object getlast(vector list) { synchronized (list) { int lastindex = list.size() - 1; return list.get(lastindex); atomizujem check-then-act

Iterovanie cez kolekcie Často je ťažké na prvý pohľad odhaliť, že nejaká metóda iteruje cez kolekciu public class SynchronizedSet { private final Set<Double> set = new HashSet<Double>(); public synchronized void add(double i) { set.add(i); public synchronized void remove(integer i) {set.remove(i);... public void addtenthings() { for (int i = 0; i < 10; i++) add(math.random()); System.out.println("added ten elements to " + set);

Iterovanie cez kolekcie Často je ťažké na prvý pohľad odhaliť, že nejaká metóda iteruje cez kolekciu public class SynchronizedSet { private final Set<Double> set = new HashSet<Double>(); public synchronized void add(double i) { set.add(i); public synchronized void remove(integer i) {set.remove(i);... public void addtenthings() { for (int i = 0; i < 10; i++).tostring() add(math.random()); System.out.println("added ten elements to " + set);

Iterovanie cez kolekcie Typické metódy, ktoré iterujú cez kolekciu tostring() hashcode() equals() containsall() removeall() retainall() konštruktory s kolekciou na vstupe Ak používame synchronizované kolekcie, niektoré z týchto metód sa musia extra zamykať

Iterácie cez synchronizované kolekcie Môžeme aplikovať client-side zamykanie Ak je kolekcia dlhá, môže to značne spomaliť Počas iterovania nemôže žiadne vlákno pristupovať ku kolekcii ani čítať, ani meniť Ak je akcia s prvkom dlhá, môžeme synchronizovane riešiť skopírovanie kolekcie a pracovať s prvkami až potom Ak je málo zmien a veľa iterovaní, je to neefektívne Robustnejším riešením sú konkurentné kolekcie

Konkurentné kolekcie Balíček java.util.concurrent Nezamyká sa celá štruktúra, iba nutná časť Dodané nové atomické metódy na typické akcie putifabsent, addifabsent replace podmienené mazanie Iterátory sú slabo konzistentné Nezablokujú kolekciu počas iterovania Typicky neaktuálne operácie iterácia, size(), isempty()

Konkurentné kolekcie HashMap ConcurrentHashMap TreeMap ConcurrentSkipListMap TreeSet ConcurrentSkipListSet ArrayList CopyOnWriteArrayList Vytvára novú kópiu štruktúry pri zmene Iterátory majú fotku zoznamu v čase ich vytvorenia Vhodné, ak je viac čítaní ako zápisov Ak je to naopak, vhodnejší je synchronizovaný zoznam s vytváraním kópie pred iterovaním

Blokovaný rad Implementácie interfejsu BlockingQueue Najčastejšie ArrayBlockingQueue, LinkedBlockingQueue Blokované operácie put(prvok) zaspím, kým nebude v rade voľné miesto take() zaspím, kým nebude v rade nejaký prvok Dočasne blokované operácie offer(prvok, čas, jednotka) poll(čas, jednotka) Ak sa nepodarí akcia za uvedený čas, vrátim false/null Vhodné pre návrhový vzor producenti-konzumenti

Ukončenie práce konzumentov Ak producenti nemajú čo produkovať, skončia Konzumenti by mali byť informovaní, nech už nečakajú na ďalšie prvky a tiež skončia Ak máme jediného konzumenta Producenti dekrementujú nejakú atomickú premennú početaktívnychproducentov Konzument chce konzumovať: v prípade, že je rad prázdny pozrie, či je nejaký producent aktívny, ak áno čaká na prvok, ak nie tak končí v prípade, že rad nie je prázdny, skonzumuje prvok

Ukončenie práce konzumentov Ak máme ľubovoľný počet konzumentov Chutnejšie riešenie je dať do radu otrávené pilulky (poison pills) Špeciálny prvok, znamenajúci: skonči! Aspoň toľko piluliek, koľko je konzumentov public class Konzument { public void run() { while(true) { Element element = queue.take(); if (element.equals(poison_pill)) break; consume(element);

Zadanie Stiahnite si z GitHubu poslednú verziu: https://github.com/petergursky/kopr2016 Nasledovný balíček: sk.ics.upjs.kopr2016.cviko04.zadanie 1. Zabezpečte súbežnú prácu úlohy Searcher a úlohy FileAnalyzer cez blokovaný rad 2. Zvýšte počet vlákien súbežne vykonávajúcich úlohu FileAnalyzer 3. Zvýšte počet vlákien súbežne vykonávajúcich úlohu Searcher

Riešenie 1 Spustíme úlohu Searcher v samostatnom vlákne Na rad súborov na analýzu použijeme LinkedBlockingQueue Využijeme poison pill

Zadanie Stiahnite si z GitHubu poslednú verziu: https://github.com/petergursky/kopr2016 Nasledovný balíček: sk.ics.upjs.kopr2016.cviko04.zadanie 1. Zabezpečte súbežnú prácu úlohy Searcher a úlohy FileAnalyzer cez blokovaný rad 2. Zvýšte počet vlákien súbežne vykonávajúcich úlohu FileAnalyzer 3. Zvýšte počet vlákien súbežne vykonávajúcich úlohu Searcher

Riešenie 2 Spustíme N vlákien s úlohou FileAnalyzer Úloha Searcher vygeneruje N otrávených piluliek Ak chceme počkať s výpisom riešenia potrebujeme mechanizmus na informovanie o skončení N vlákien s úlohou FileAnalyzer CountDownLatch

CountDownLatch Funguje ako brána, ktorá sa otvorí, keď sa dosiahne konečný stav Blokované čakanie na otvorenie: countdownlatch.await(); Spím pokiaľ sa neotvorí Štartovací stav : počet vlákien Keď vlákno končí úlohu, nakoniec dekrementuje stav countdownlatch.countdown(); Konečný stav hodnota 0

Riešenie 2 Spustíme N vlákien s úlohou FileAnalyzer Úloha Searcher vygeneruje N otrávených piluliek Využijeme CountDownLatch main await(); FileAnalyzer countdown(); Zabezpečíme atomickosť zmeny počtu výskytov slov v úlohe FileAnalyzer cez kritickú sekciu alebo cez konkurentnú mapu slov na AtomicInteger

Zadanie Stiahnite si z GitHubu poslednú verziu: https://github.com/petergursky/kopr2016 Nasledovný balíček: sk.ics.upjs.kopr2016.cviko04.zadanie 1. Zabezpečte súbežnú prácu úlohy Searcher a úlohy FileAnalyzer cez blokovaný rad 2. Zvýšte počet vlákien súbežne vykonávajúcich úlohu FileAnalyzer 3. Zvýšte počet vlákien súbežne vykonávajúcich úlohu Searcher

Riešenie 3 Potrebujeme rad adresárov na prehľadávanie Spustíme N vlákien s úlohou Searcher Úloha Searcher končí, keď už žiaden adresár nebude prehľadávaný Pozor na dočasne prázdny rad adresárov na prehľadávanie AtomicInteger unprocesseddirs Aspoň jedna úloha Searcher vygeneruje N otrávených piluliek Na ukončenie potenciálne donekonečna čakajúcich úloh Searcher môžeme opäť využiť otrávené pilulky