Pattern Oriented Software Architecture - PowerPoint PPT Presentation

1 / 139
About This Presentation
Title:

Pattern Oriented Software Architecture

Description:

Title: PowerPoint Presentation Last modified by: filip Created Date: 1/1/1601 12:00:00 AM Document presentation format: On-screen Show (4:3) Other titles – PowerPoint PPT presentation

Number of Views:134
Avg rating:3.0/5.0
Slides: 140
Provided by: cun104
Category:

less

Transcript and Presenter's Notes

Title: Pattern Oriented Software Architecture


1
Pattern Oriented Software Architecture
2
Pattern Oriented Software Architecture
3
Pattern Oriented Software Architecture
  • Vol. 1 - A System of Patterns
  • 2. Architectural Patterns
  • 2.2 From Mud to Structure
  • Layers, Pipes and Filters, Blackboard
  • 2.3 Distributed Systems
  • Broker
  • 2.4 Interactive Systems
  • Model-View-Controller, Present.-Abstraction-Contro
    l
  • 2.5 Adaptable Systems
  • Microkernel, Reflection
  • 3. Design Patterns
  • 3.2 Structural Decomposition
  • Whole-Part
  • 3.3 Organization of Work
  • Master-Slave
  • 3.4 Access Control
  • Proxy
  • Vol. 2 - Patterns for Concurrent and Networked
    Objects
  • 2. Service Access and Configuration Patterns
  • Wrapper Facade
  • Component Configurator
  • Interceptor
  • Extension Interface
  • 3. Event Handling Patterns
  • Reactor
  • Proactor
  • Asynchronous Completion Token
  • Acceptor-Connector
  • 4. Synchronization Patterns
  • Scoped Locking
  • Strategized Locking
  • Thread-Safe Interface
  • 5. Concurrency Patterns
  • Active Object
  • Monitor Object

4
Vol. 1 - A System of Patterns
5
2.4 Interaktivní systémy2.5 Adaptovatelné systémy
Martin Berger
  • InteraktivnĂ­ systĂ©my
  • Popis problĂ©mu
  • Vzor MVC
  • Vzor PAC
  • AdaptovatelnĂ© systĂ©my
  • Popis problĂ©mu
  • Vzor Microkernel
  • Vzor Reflection

6
Interaktivní systémyVzory MVC a PAC
7
Interaktivní systémy popis problému
  • ChovánĂ­ rĂ­zeno vstupy uĹľivatele
  • GUI
  • WebovĂ© aplikace
  • Soucásti systĂ©mu
  • FunkcnĂ­ jádro
  • PrezentacnĂ­ vrstva
  • Vstupy uĹľivatele
  • PoĹľadovanĂ© vlastnosti
  • Nezávislost soucástĂ­
  • MoĹľnost používánĂ­ ruznĂ˝ch front-endu

8
MVC
  • Model-View-Controller
  • Model
  • Data logika aplikace
  • View
  • Pohled na model prezentovanĂ˝ uĹľivateli
  • Controller
  • PrijĂ­má vstupy uĹľivatele a zajištuje následnĂ©
    zmeny v modelu a pohledech
  • Pri vytvárenĂ­ se všechny pohledy a controllery
    zaregistrujĂ­ u modelu
  • NV Observer

9
MVC chování
10
MVC varianty, pouĹľitĂ­
  • Document view
  • MFC
  • Implementace MVC
  • Java EE model, JavaServer Page, servlet
  • Swing
  • Spring MVC
  • Zend Framework
  • ASP.NET MVC Framework

11
PAC
  • Presentation-abstraction-control
  • Stromová hierarchie kooperujĂ­cĂ­ch agentu
  • PrezentacnĂ­ a abstrakcnĂ­ cásti agentu zcela
    oddelené
  • AbstrakcnĂ­ cást
  • Data a aplikacnĂ­ logika
  • PrezentacnĂ­ cást
  • ZobrazenĂ­ dat uĹľivateli
  • Controller
  • Komunikace s ostatnĂ­mi agenty
  • Komunikace prezentacnĂ­ a abstrakcnĂ­ cásti
  • ZpracovánĂ­ vstupu uĹľivatele
  • PrĂ­klad rĂ­zenĂ­ letovĂ©ho provozu

Zdroj wikipedia
12
PAC - vlastnosti
  • Dynamická tvorba hierarchie
  • DistribuovanĂ© prostredĂ­
  • Je treba najĂ­t kompromis mezi jemnostĂ­
    dekompozice systému a efektivitou komunikace mezi
    agenty
  • Komunikace probĂ­há jen s prĂ­mo propojenĂ˝mi agenty
  • Ješte závaĹľnejší, pokud jsou agenti distribuovanĂ­
  • V praxi se používá mnohem mĂ©ne neĹľ napr. MVC
  • Komplexita návrhu
  • PrĂ­liš velká reĹľie spojená s komunikacĂ­
  • Drupal redakcnĂ­ systĂ©m

13
Adaptovatelné systémyVzory Microkernel a
Reflection
14
Adaptovatelné systémy popis problému
  • SystĂ©my se obvykle v prubehu casu vyvĂ­jĂ­
  • Nová funkcionalita
  • Podpora novejších verzĂ­ OS
  • Prechod na novou verzi GUI, knihoven,...
  • Podpora novĂ©ho hardwaru
  • RuznĂ© poĹľadavky uĹľivatelu
  • PoĹľadovanĂ© vlastnosti
  • Relativne snadnĂ© modifikace a rozšírenĂ­ aplikace
  • NeuvaĹľujeme modifikace základnĂ­ho návrhu systĂ©mu

15
Microkernel
  • PouĹľitĂ­ zejmĂ©na pro operacnĂ­ systĂ©my
  • Mikrojádro
  • ZákladnĂ­ sluĹľby
  • Komunikace
  • Správa zdroju
  • InternĂ­ server
  • RozšírenĂ­ funkcionality mikrojádra
  • Casto závislá na pouĹľitĂ©m HW
  • ExternĂ­ server
  • KonkrĂ©tnĂ­ prostredĂ­ pro klienty
  • Abstrakce nad vrstvou mikrojádra a internĂ­ch
    serveru
  • Klient
  • SvázanĂ˝ s konkrĂ©tnĂ­m externĂ­m serverem
  • AdaptĂ©r
  • PrenositelnĂ© rozhranĂ­ pro klienty

16
Microkernel použití, výhody, nevýhody
  • OperacnĂ­ systĂ©my
  • Windows NT
  • Chorus
  • PridánĂ­ novĂ© funkcionality
  • InternĂ­ server
  • NovĂ˝ pohled na logiku implementovanou mikrojádrem
  • ExternĂ­ server
  • PouĹľitĂ­ v distribuovanĂ©m prostredĂ­
  • NevĂ˝hody
  • KomplexnĂ­ návrh aplikace
  • Rychlost v porovnánĂ­ s monolitickĂ˝mi aplikacemi

17
Reflection
  • Idea programu umoĹľnĂ­me prĂ­stup ke svĂ© vlastnĂ­
    strukture
  • 2 vrstvy metavrstva a skutecnĂ˝ kĂłd aplikace
  • Vrstva metaobjektu
  • Aspekty systĂ©mu, u kterĂ˝ch poĹľadujeme moĹľnost
    zmeny
  • StrukturálnĂ­ metaobjekty
  • FunkcnĂ­ metaobjekty
  • Informace o stavu vrstvy s aplikacnĂ­m kĂłdem
  • PrĂ­klady funkcionality poskytovanĂ© metavrstvou
  • TypovĂ© informace
  • VolacĂ­ konvence
  • VyhledávánĂ­ komponent systĂ©mu
  • Komunikace mezi komponentami systĂ©mu
  • TransakcnĂ­ protokoly
  • Vrstva s aplikacnĂ­m kĂłdem
  • VlastnĂ­ logika aplikace
  • Cinnosti, u kterĂ˝ch predpokládáme moĹľnost zmeny,
    vykonává pomocí metavrstvy

18
Reflection
  • MOP metaobject protocol
  • ProvádĂ­ zmeny v metavrstve
  • Poskytuje interface umoĹľnujĂ­cĂ­ vyvolánĂ­ zmen
  • PrĂ­stupnĂ˝ aplikacnĂ­ vrstve a/nebo systĂ©movĂ©mu
    administrátorovi
  • Modifikace nekterĂ©ho aspektu aplikace
  • Specifikace novĂ©ho metaobjektu
  • Ăšprava stávajĂ­cĂ­ho metaobjektu
  • Aktualizace v mĂ­stech pouĹľitĂ­ v metavrstve
  • MuĹľe vyĹľadovat preloĹľenĂ­/prilinkovánĂ­ k aplikaci
  • Reflection vĂ˝hody
  • Pri zmenách nemenĂ­me kĂłd, pouze voláme metody MOP
  • PoužívánĂ­ metod MOP je typicky snadnĂ©
  • Reflection nevĂ˝hody
  • Nutná podpora programovacĂ­ho jazyka
  • Nižší efektivita
  • Modifikace mohou bĂ˝t destruktivnĂ­

19
3.3 Master-Slave3.4 Command processor3.5 View
handler
  • Martin DobrouckĂ˝, 19.5.2010

20
Master-Slave
  • Ăšcel
  • RozdelenĂ­ velkĂ© Ăşlohy na vĂ­ce menších podĂşloh a
    výpocet finálního výsledku
  • Definuje zpusob rozdelenĂ­ Ăşlohy, rozhranĂ­ pro
    komponenty Master a Slave
  • Aplikace principu Rozdel a panuj
  • Kategorie
  • Organization of work Organizace práce
  • VyuĹľitĂ­
  • ParalelnĂ­ programovánĂ­
  • KaĹľdá podĂşloha se vykoná paralelne jako
    samostatné vlákno/program
  • Odolnost vuci chybám
  • N-modular redundancy
  • Struktura
  • PodĂşlohy obvykle identickĂ© algoritmy
  • Nekdy vhodnĂ© použít najednou ruznĂ© algoritmy,
    které však reší stejnou úlohu

21
Master-Slave
  • Struktura
  • Návrh pouĹľitĂ­
  • Klient si vyžáda sluĹľbu od mastera
  • Master rozdelĂ­ Ăşlohu na podĂşlohy
  • Master deleguje vykonánĂ­ podĂşloh na otroky,
    spustí je a ceká na výsledky
  • Otroci vypoctou vĂ˝sledky a odešlou je
  • Master zpracuje obdrĹľenĂ© vĂ˝sledky od otroku do
    finálního výsledku
  • Master odešle vĂ˝sledek klientovi

22
Command processor
  • Ăšcel
  • ZapouzdrenĂ­ sloĹľitejších Ăşkonu do jednoho
    objektu, se kterým lze snadno pracovat
  • Kategorie
  • Management zpracovánĂ­ objektu/sluĹľeb/komponent
    obdobného druhu
  • SouvisejĂ­cĂ­ vzory
  • Command processor stavĂ­ na vzoru Command
  • NavĂ­c se stará i o správu command objektu
  • Intepreter
  • VyuĹľitĂ­
  • Tvorba flexibilnĂ­ho UI
  • Undo-Redo operace

23
Command processor undo/redo
  • Struktura
  • Návrh pouĹľitĂ­
  • Controller dostane poĹľadavek na akci a k nemu
    priradí konkrétní Command
  • Controller predá objet Command na Command
    processor
  • Command processor spustĂ­ Command a zaradĂ­ ho do
    zásobníku provedených akcí
  • Command se provede
  • Klient zavolá prĂ­kaz Undo - Controller zavolá
    Undo prĂ­mo na Command processoru

24
View handler
  • Ăšcel
  • Poskytuje uĹľivateli ruznĂ© pohledy nad stejnĂ˝mi
    daty
  • Ăšpravy, synchronizace a management jednotlivĂ˝ch
    pohledu
  • JednotlivĂ© pohledy by na sobe mely bĂ˝t navzájem
    nezávislé
  • Kategorie
  • Management
  • SouvisejĂ­cĂ­ vzory
  • View handler je vlastne
  • Abstract factory vytvárĂ­ pro klienta pohledy
  • Mediator sám se stará o koordinaci mezi pohledy
  • VyuĹľitĂ­
  • OddelenĂ­ prezentacnĂ­ vrstvy od funkcnĂ­
  • MVC
  • TextovĂ˝ editor
  • VĂ­ce oken pro jeden dokument najednou

25
View handler
  • Struktura
  • Kroky
  • Klient požádá View handler o vytvorenĂ­ novĂ©ho
    pohledu
  • Viev handler inicializuje novĂ˝ pohled a predá mu
    jeho Supplier
  • NovĂ˝ pohled se zaradĂ­ do seznamu pohledu a otevre
    ho
  • View nacte data ze svĂ©ho Supplier a zobrazĂ­ je
  • Opakuje pro další pohledy
  • Pohled pri kaĹľdĂ© zmene predá nová data pres
    Supplier
  • Viev handler zavolá update pro všechny pohledy a
    ty se aktualizujĂ­

26
3.6 Komunikacní návrhové vzory
Forwarder-Receiver Client-Dispatcher-Server Publi
sher-Subscriber
Michal Folk 1.5.2010
27
Komunikacní návrhové vzory
  • CĂ­l prednášky
  • ObeznámenĂ­ se skupinou komunikacnĂ­ch NV
  • Prezentace hlavnĂ­ch myšlenek
  • Motivace pro další (samo)studium
  • CĂ­lem nenĂ­ podrobnĂ˝ vĂ˝klad všech moĹľnostĂ­ a
    implementace
  • Obsah
  • PrĂ­klad
  • Forwarder-Receiver
  • Client-Dispatcher-Server
  • Publisher-Subscriber
  • Varianty
  • ShrnutĂ­

28
Komunikacní návrhové vzory
  • PrĂ­klad
  • SystĂ©m pro správu pocĂ­tacovĂ© sĂ­te
  • MonitorovánĂ­ událostĂ­ a zdroju
  • Konfigurace sĂ­te
  • Peer to peer komunikace mezi uzly sĂ­te
  • Podpora ruznĂ©ho hardware

Zdroj PATTERN-ORIENTED SOFTWARE ARCHITECTURE, A
System of Patterns, p. 307
29
Komunikacní návrhové vzory
  • Realizace
  • VytvorenĂ­ agentu bežícĂ­ch na uzlech v sĂ­ti
  • Low-level mezi-procesová (IPC) komunikace
  • Efektivnejší neĹľ high-level mechanizmy
  • ProblĂ©my
  • Závislost na OS
  • Závislost na sĂ­tovĂ˝ch protokolech
  • OmezenĂ­ prenositelnosti
  • Omezená podpora heterogennĂ­ch prostredĂ­
  • Pozdejší zmena IPC mechanizmu

30
Forwarder-Receiver
  • RešenĂ­
  • Spolupráce mezi agenty
  • Agent figuruje jako klient i jako server, nebo
    oboje
  • ZapouzdrenĂ­ IPC mechanizmu do samostatnĂ˝ch
    komponent

PrijetĂ­ poĹľadavku
Odeslání požadavku
Klient poĹľaduje sluĹľbu
Server poskytne žádanou službu
31
Forwarder-Receiver
Poskytuje všeobecné rozhraní pro posílání
zpráv Marshalling a dorucení zpráv Mapování
symbolických jmen na fyzické adresy
  • Struktura

Poskytuje všeobecné rozhraní pro prijímaní
zpráv Prijímání a unmarshalling zpráv
Poskytuje aplikacnĂ­ sluĹľby Komunikuje s ostatnĂ­mi
peer-mi
Zdroj PATTERN-ORIENTED SOFTWARE ARCHITECTURE, A
System of Patterns, p. 311
32
Forwarder-Receiver
  • PouĹľitĂ­ návrhovĂ©ho vzoru
  • Kontext
  • Peer to peer komunikace
  • RešenĂ˝ problĂ©m
  • Vymenitelnost komunikacnĂ­ho mechanizmu
  • Spolupráce komponent na základe symbolickĂ˝ch jmen
  • Komunikace bez vlivu na vĂ˝kon aplikace
  • RešenĂ­
  • UkrytĂ­ komunikacnĂ­ho mechanizmu mimo Peer-u
    vytvorenĂ­ forwarder a receiver komponent
  • Dusledky pouĹľitĂ­
  • EfektivnĂ­ mezi-procesová komunikace
  • ZapouzdrenĂ­ IPC prostredku
  • Žádná podpora pro rekonfiguraci komponent

33
Client-Dispatcher-Server
  • ProblĂ©my se systĂ©mem pro správu pocĂ­tacovĂ© sĂ­te
  • VyrešenĂ­ predcházejĂ­cĂ­ch problĂ©mu
  • Závislost na OS, omezená prenositelnost, zmena
    IPC mechanizmu apod.
  • ZavlecenĂ­ novĂ©ho problĂ©mu
  • ProblĂ©my s prizpusobenĂ­m se zmenám distribuce
    Peer komponent za behu
  • RešenĂ­
  • VytvorenĂ­ mezivrstvy mezi komunikujĂ­cĂ­mi Peer-mi,
    resp. mezi Forwarderem a Receiverem
  • Dispatcher komponenta

34
Client-Dispatcher-Server
  • Ăšlohy Dispatcher komponenty v systĂ©mu pro správu
    pocítacové síte
  • Implementace name service sluĹľby
  • TransparentnĂ­ lokalizace Peer-u
  • JinĂ© Ăşlohy Dispatcher-a
  • NavázánĂ­ spojenĂ­, (od)registrace serveru a pod.

Client-Dispatcher-Server with communication
managed by clients
35
Client-Dispatcher-Server
  • Struktura

Implementuje systémové úlohy Získává spojení na
server od Dispatcher-a Vyvolává služby serveru
Vytvárí komunikacní kanál mezi klientem a
serverem Lokalizuje server Registruje
server Odregistruje server Udržuje databázi
fyzických adres serveru
Poskytuje sluĹľby klientum Registruje se u
Dispatcher-a
Zdroj PATTERN-ORIENTED SOFTWARE ARCHITECTURE, A
System of Patterns, p. 326
36
Client-Dispatcher-Server
  • PouĹľitĂ­ návrhovĂ©ho vzoru
  • Kontext
  • SystĂ©m integrujĂ­cĂ­ mnoĹľinu distribuovanĂ˝ch
    serveru
  • RešenĂ˝ problĂ©m
  • PouĹľitĂ­ sluĹľeb bez závislosti od jejich umĂ­stnenĂ­
  • OddelenĂ­ implementace konzumenta sluĹľby od
    navazování spojení se službou
  • RešenĂ­
  • VytvorenĂ­ vrstvy mezi klientem a serverem
    poskytující transparentní vyhledávání služeb a
    navazování spojení
  • OdkazovánĂ­ se na server podle jmĂ©na
  • Dusledky pouĹľitĂ­
  • Vymenitelnost serveru, transparentnĂ­ umĂ­stnenĂ­ a
    presun serveru, rekonfigurace, odolnost vuci
    poruchám, neefektivní navazování spojení,
    citlivost na zmeny dispatcher-a

37
Publisher-Subscriber
  • Aliasy
  • Observer, Dependents
  • Soucást základnĂ­ch návrhovĂ˝ch vzoru (behavioral
    patterns)
  • PripomenutĂ­
  • OdstranenĂ­ tesnĂ© vazby
  • One to many závislost
  • Subject (Publisher),Observer (Subscriber)
  • Notifikace,aktualizace

Zdroj MFF UK, predmet Návrhové vzory, prezentace
Obeserver pattern, Miroslav Baron
38
Publisher-Subscriber
  • Varianty
  • Gatekeeper
  • DistribuovanĂ© systĂ©my
  • Vzdálená notifikace
  • Event Channel
  • DistribuovanĂ© systĂ©my
  • SilnĂ© oddelenĂ­ Publisher-a a Subscriber-a
  • Kanál pro zachycenĂ­ událostĂ­ mezi Publisher-om a
    Subscriber-om, Proxy Publisher/Subscriber
  • Producer-Consumer
  • OddelenĂ­ Producer-a a Consumer-a vyrovnávacĂ­
    pametĂ­
  • Obvykle vztah 11

39
Komunikacní návrhové vzory
  • ShrnutĂ­
  • Forwarder-Receiver
  • TransparentnĂ­ mezi-procesová komunikace
  • Peer to peer model
  • OddelenĂ­ Peer-u od komunikacnĂ­ch mechanizmu
  • Client-Dispatcher-Server
  • ZavádĂ­ vrstvu mezi klientem a serverem
    Dispatcher
  • TransparentnĂ­ vyhledávánĂ­ serveru podle jmen
  • NavazovánĂ­ spojenĂ­
  • Publisher-Subscriber
  • UdrĹľuje stav spolupracujĂ­cĂ­ch komponent
    synchronizovanĂ˝
  • Jednosmerná propagace zmen

40
Vol. 2 - Concurrent and Networked Objects
41
2. Service access and configuration patterns
Dalibor FrĂ­valdskĂ˝
  • Wrapper facade
  • Component configurator
  • Interceptor
  • Extension interface

42
Wrapper facade
  • Fasáda zakrĂ˝vá ( komplexnĂ­ ) vztahy mezi objekty
  • Wrapper fasáda zakrĂ˝vá nĂ­zkoĂşrovnová rozhranĂ­
  • Low-level API
  • NĂ­zká Ăşroven abstrakce
  • Nekompatibilita mezi platformami
  • NárocnĂ© na užívánĂ­
  • NáchylnĂ© na chyby

43
Abstrakce, zapouzdrenĂ­, sjednocenĂ­
  • Zvýšit Ăşroven abstrakce
  • Funkce prevĂ©st na trĂ­dy a rozhranĂ­
  • JednotnĂ© rozhranĂ­ na všech platformách
  • ZadnĂ­ dvĂ­rka

44
Jak na to
  • Seskupit funkce pracujĂ­cĂ­ se stejnĂ˝mi datovĂ˝mi
    strukturami
  • Identifikovat prunik funkcionalit na
    podporovaných platformách
  • Skupiny pruniky trĂ­dy wrapper fasády
  • Ponechat prĂ­stup k nĂ­zkorĂşrovnovĂ˝m datovĂ˝m
    strukturám (handle, ukazatel)

45
Component configurator
  • Motivace konfigurovatelnost aplikace za jejĂ­ho
    behu
  • Statická logika aplikacĂ­
  • Zmena implementace znamená rekompilaci celĂ©ho
    programu
  • Zmena konfigurace znamená restart celĂ© aplikace
  • Ruzná prostredĂ­ ruznĂ© konfigurace

46
Komponenta s ĹľivotnĂ­m cyklem
  • VyuĹľitĂ­ sluĹľeb OS nebo runtime platformy
  • UmoĹľnenĂ­ dynamickĂ©ho pripojenĂ­ komponent k
    aplikaci
  • Komponenta s ĹľivotnĂ­m cyklem inicializace,
    zastavení, opetovné spuštení, deinicializace
  • Zmena stavu komponenty neovlivnĂ­ celou aplikaci

47
Jak na to
  • Vytvorit rozhranĂ­ pro pripojenĂ­ komponent
  • Repozitár komponent udrĹľuje jejich seznam
  • Konfigurátor správa ĹľivotnĂ­ho cyklu
  • NárocnĂ© na implementaci
  • ExistujĂ­cĂ­ rešenĂ­
  • OSGi framework ( základ Eclipse )
  • Windows NT service control manager

48
Interceptor
  • Motivace rozširitelnost systĂ©mu o novĂ© sluĹľby
  • Neznalost všech potreb klienta v dobe vĂ˝voje
  • RešenĂ­
  • MonolitickĂ˝ systĂ©m obsahujĂ­cĂ­ vše
  • Ăšplná otevrenost systĂ©mu
  • NevĂ˝hody
  • VelkĂ© a neflexibilnĂ­
  • NebezpecnĂ©

49
Události a callbacky
  • PridávánĂ­ sluĹľeb do systĂ©mu na presne urcenĂ˝ch
    mĂ­stech
  • MĂ­sto událost ( prĂ­jem zprávy, spracovánĂ­
    dotazu, )
  • SluĹľba callback ( logovánĂ­, kryptovánĂ­, )
  • CástecnĂ© otevrenĂ­ a zprĂ­stupnenĂ­ vnitrnĂ­
    funkcionality systému

50
Jak na to
  • Zmena systĂ©mu na stavovĂ˝ automat
  • Prechod mezi stavy potenciálnĂ­ mĂ­sto pro
    událost
  • DefinovánĂ­ rozhranĂ­ pro callback zpracovánĂ­
    události
  • VytvorenĂ­ kontextu pro událost
  • Informace o události
  • ModifikovánĂ­ chovánĂ­ systĂ©mu
  • Vztah událost callback je 1 ku n
  • EJB, CORBA components, COM ( proxy varianta )

51
Extension interface
  • Motivace evoluce rozhranĂ­ komponent
  • V pocátcĂ­ch vĂ˝voje teĹľkĂ© predpovedet, jak a kam
    se systém rozroste
  • PridávánĂ­ funkcionalit prehuštenĂ­ rozhranĂ­
    metodami
  • TeĹľkĂ© udrĹľovat zpetnou kompatibilitu

52
Mám více tvárí
  • CĂ­l rozdelit jedno velkĂ© rozhranĂ­ na vĂ­cero
    malých
  • Jedna komponenta implementuje nekolik rozhranĂ­ (
    tvárí )
  • VĂ˝ber rozhranĂ­ pro prĂ­stup ke komponente je na
    uĹľivateli
  • JednotnĂ˝ prĂ­stup ke všem rozhranĂ­m

53
Jak na to
  • Vytvorit jedno základnĂ­ všeobecnĂ© ( root )
    rozhranĂ­
  • Implementuje kaĹľdá komponenta
  • Poskytuje prĂ­stup k ostatnĂ­m rozhranĂ­m
  • MuĹľe obsahovat spolecnou funkcionalitu všech
    komponent
  • KaĹľdĂ© rozhranĂ­ má jedinecnĂ˝ identifikátor a
    rozširuje root rozhraní
  • Komponenta implemetuje všechna rozhranĂ­, která
    podporuje
  • Klient nemá prĂ­mĂ˝ prĂ­stup ke komponente
  • COM, CORBA component model

54
3. Event Handling Patterns
  • David Babka

55
Ăšvod
  • Ăšcel
  • PoskytujĂ­ zpusob jak inicializovat, prijmout,
    demultiplexovat, dispatchovat a spracovat
    události (eventy) v sítove orientovaných
    systémech
  • SouvisejĂ­cĂ­ návrhovĂ© vzory
  • Reactor, Proactor, Asynchronous Completion Token
    a Acceptor-Connector

56
Reactor - Ăşvodem
  • TakĂ© známĂ˝ jako Dispatcher nebo Notifier
  • ArchitekturálnĂ­ návrhovĂ˝ vzor poskytujĂ­cĂ­
    event-driven aplikacím vyvolávat požadavky
    jednoho ci vĂ­ce klientu podle Hollywood principu
  • Dont call us, well call you
  • Jeho Ăşkolem je prevzĂ­t veškerou zodpovednost za
    požadavky odeslané klienty a prevést je na
    požadované služby tak, aby se aplikace už
    nemusela o nic starat

57
Reactor - MotivacnĂ­ prĂ­klad
  • DistribucnĂ­ logovacĂ­ sluĹľba
  • Máme aplikaci, která potrebuje pravidelne ukládat
    svuj soucasný stav na server v distribuovaném
    systému.
  • LogovacĂ­ sluĹľba má za Ăşkol tyto data uloĹľit do
    databáze (nebo vytisknout)
  • Klient muĹľe vyvolat pouze dve události
  • Connect žádost o pripojenĂ­ k serveru
  • Read žádost o prectenĂ­ logu
  • HloupĂ© rešenĂ­
  • Vytvorit pro kaĹľdĂ© pripojenĂ­ novĂ© vlákno
  • ProblĂ©my
  • NeefektivnĂ­, neškálovatelnĂ© nelze menit kontext
  • VyĹľaduje sloĹľitou správu vláken
  • Vlákna nejsou podporována na všech systĂ©mech

58
Reactor - Myšlenka
  • VytvorenĂ­ event-driven aplikace, která bude
    schopná prijímat více požadavku zároven a bude je
    schopna je postupne synchronne spracovat.
  • ProblĂ©my
  • SluĹľba musĂ­ bĂ˝t schopna spracovat vĂ­ce poĹľadavku
    najednou
  • KaĹľdĂ˝ z poĹľadavku je oznacen identifikátorem
    události a služba musí být schopna tento
    požadavek demultiplexovat a vyvolat adekvátní
    událost
  • RešenĂ­
  • Synchronne cekat na prĂ­chozĂ­ poĹľadavky
  • Integrovat demultiplexor a dispatcher jako
    služby, které se starají o požadavky
  • Oddelit dispatcher a demultiplexor od aplikacnĂ­
    logiky

59
Reactor - Struktura
60
Reactor - PrĂ­klad ze Ĺľivota
  • TelefonnĂ­ linka
  • TelefonnĂ­ sĂ­t je Reactor.
  • Vy jste event handler registrovanĂ˝ telefonnĂ­m
    cĂ­slem (handle).
  • Pokud se vás nekdo pokouší dovolat, telefonnĂ­ sĂ­t
    vás na hovor upozorní zvonením a vy tuto událost
    spracujete tĂ­m, Ĺľe zvednete telefon.

61
Proactor - Ăşvodem
  • ArchitekturálnĂ­ návrhovĂ˝ vzor, kterĂ˝ dokáže
    efektivne demultiplexovat a dispatchovat
    požadavky služby spouštené dokoncením
    asynchronních operací, aby tak dosáhl vyšších
    výkonu a soubežnosti
  • Jeho aplikacnĂ­ komponenty (klient, completion
    handlers) jsou proaktivnĂ­

62
Proactor - MotivacnĂ­ prĂ­klad
  • WebServer
  • pokud si uĹľivatel chce zobrazit webovou stránku,
    musí dojít k následujícím událostem
  • ProhlĂ­Ĺľec naváže spojenĂ­ se serverem a zašle
    poĹľadavek GET
  • Server obdrží událost s žádostĂ­ o pripojenĂ­,
    prijme spojenĂ­ a precte si poĹľadavek
  • Server otevre a precte poĹľadovanĂ˝ soubor
  • Server odešle obsah souboru zpet prohlĂ­Ĺľeci a
    uzavre spojenĂ­
  • HloupĂ© rešenĂ­
  • Použít návrhovĂ˝ vzor Reactor
  • ProblĂ©my
  • Nedostatecne škálovatelnĂ˝ pro velkĂ© mnoĹľstvĂ­
    soucasne pripojených uživatelu
  • UĹľivatelĂ© by museli cekat neĹľ by na ne došla rada

63
Proactor - Myšlenka
  • Event-driven aplikace schopná prijĂ­mat a
    spracovávat požadavky asynchronne
  • ProblĂ©my
  • Po dokoncenĂ­ asynchronnĂ­ho spracovávánĂ­ poĹľadavku
    musí být výsledek spracován pomocí dalších
    príslušných událostí
  • RešenĂ­
  • RozdelenĂ­ aplikacnĂ­ch sluĹľeb na dve cásti
  • DlouhotrvajĂ­cĂ­ operace
  • Completion handlery
  • Completion handler se stará o spracovánĂ­ vysledku
    dlouhotrvajĂ­cĂ­ch operacĂ­ po jejich dokoncenĂ­

64
Proactor - Struktura
65
Proactor PrĂ­klad ze Ĺľivota
  • UpozornenĂ­ neprijatĂ˝ch hovoru
  • Pokud zavolám kamarádovi, kterĂ˝ je momentálne
    nedostupnĂ˝, ale vĂ­m, Ĺľe pokud uvidĂ­ upozornenĂ­,
    tak zavolá zpet. V tomto prípade jsem initiator,
    kterĂ˝ poĹľaduje asynchronnĂ­ operaci na
    asynchronous operation processoru (telefon mého
    kamaráda). Mezitím než se kamarád ozve si muže
    zatím procvicovat návrhové vzory. Tím že si
    kamarád precte upozornení neprijatých hovoru a
    zavolá mi zpet se chová jako proactor a tím že
    ten telefon zvednu se chovám jako completion
    handler, který práve spracovává callback.

66
Asynchronous Completion Token (ACT)
  • Další názvy Active Demultiplexing, Magic Cookie
  • UmoĹľnuje aplikaci efektivne demultiplexovat a
    spracovat asynchronní operace závislé na službách
    aplikace

67
ACT MotivacnĂ­ prĂ­klad
  • RozsáhlĂ˝ internetovĂ˝ burzovnĂ­ systĂ©m
  • Nutnost kontroly, aby veškerĂ© aktivity byly
    provádeny bezchybne chyba muže znamenat ušlý
    zisk a zpusobit Ĺľaloby
  • VytvárenĂ­ management agentu, kterĂ­ delajĂ­ analĂ˝zy
    a snaží se detekovat možné chyby
  • Techto agentu muĹľou bĂ˝t stovky a na kaĹľdĂ˝ z nich
    muže být zachyceno hned nekolik událostí, které
    mají informovat administrátory. Navíc každá z
    techto událostí muže být vyhodnocena jiným
    zpusobem.

68
ACT - Myšlenka
  • Evet-driven systĂ©m, ve kterĂ©m aplikace
    asynchronne vyvolajá službu a následne se
    spracuje výsledek této služby prirazenou akcí.
  • ProblĂ©my
  • Pokud se vyšle poĹľadavek na vĂ­ce asynchronnĂ­ch
    sluĹľeb najednou, tak sluĹľby nemusĂ­ vedet kterĂ˝
    handler na který požadavek použít
  • Po spracovánĂ­ sluĹľby by mela aplikace strávit co
    nejméne casu zjištováním co s výsledkem udelat
  • RešenĂ­
  • S kaĹľdou asynchronnĂ­ sluĹľbou, kterou initiator
    vyvolá zároven pošle informaci, která
    identifikuje jak by mel initiator spracovat
    výsledek použité služby.
  • Po skoncenĂ­ operace se tato informaci vratĂ­ zpet
    initiatorovi , tak aby mohla být efektivne
    pouĹľita k demultiplexovanĂ­ odpovedi.

69
ACT - Struktura
70
ACT PrĂ­klad ze Ĺľivota
  • FeDex
  • Tato poštovnĂ­ sluĹľba má moĹľnost odeslánĂ­ Ăşctu po
    uspešném dorucení balícku, ve kterém je volné
    pole, do kterého si mohl odesílatel pred
    odesláním balíku napsat libovolnou hodnotu napr.
    vlastní identifikátor balíku, nebo odkaz na další
    operace, které je po dorucení balíku nutno udelat.

71
Acceptor-Connector
  • Oddeluje pripojenĂ­ a inicializaci
    spolupracujĂ­cĂ­ch peer sluĹľeb v sĂ­tove
    orientovaném systému od spracovávání provádené
    temito peer sluĹľbami po jejich pripojenĂ­ a
    inicializaci

72
Acceptor-Connector MotivacnĂ­ prĂ­klad
  • Rozsáhlá distribucnĂ­ aplikace monitorujĂ­cĂ­ a
    kontrolující shlukování satelitu.
  • Takováto sĂ­t se typicky skládá z multi-service
    brány na aplikacním levelu, která prepojuje
    posílání dat mezi ruznými peery
  • Aplikace používá TCP-IP protokol s tĂ­m, Ĺľe
    jednotlivé porty poskytují ruzné služby
  • SluĹľby by meli mĂ­t pres bránu následujĂ­cĂ­
    moĹľnosti
  • Aktivne vytvorit spojenĂ­
  • Pasivne prijĂ­mat spojenĂ­ od jinĂ˝ch peeru
  • Chovat se ruzne za danĂ˝ch situacĂ­ch

73
Acceptor-Connector Myšlenka
  • SĂ­tove zaloĹľenĂ˝ systĂ©m nebo aplikace, ve kterĂ©
    jsou connection-oriented protokoly pouĹľity ke
    komunikaci mezi peery. SluĹľby techto peeru jsou
    propojeny transportními koncovými body.
  • ProblĂ©my
  • Aplikace v sĂ­tove orientovanĂ˝ch systĂ©mech typicky
    obsahují velké množství kódu na konfiguraci
    pripojenĂ­ a inicializaci sluĹľeb. Tento kĂłd je
    casto nezávislý spracovávání služeb pro presun
    dat. Seskupování konfiguracního kódu s aplikacním
    kódem muže vést k problémum.

74
Acceptor-Connector - Rešení
  • RozdelenĂ­ pripojujĂ­cĂ­ch a inicializacnĂ­ch sluĹľeb
    od ostatnĂ­ch sluĹľeb peeru
  • ZapouzdrenĂ­ aplikacnĂ­ch sluĹľeb pomocĂ­ peer
    service handleru
  • VytvorenĂ­ acceptor factory
  • VytvorenĂ­ connector factory

75
Acceptor-Connector - Struktura
76
Acceptor-Connector PrĂ­klad ze Ĺľivota
  • ManaĹľeri a sekretárky
  • ManaĹľer se chce spojit s jinĂ˝m manaĹľerem, tak
    požádá svou sekretárku, aby za nej uskutecnila
    hovor. Sekretárka zavolá druhému manažerovi, ale
    na telefon odpoví jiná sekretárka. Sekretárka,
    která hovor uskutecnila by byla v tomto prípade
    connector a sekretárka, která hovor prijala by
    byla acceptor. JednotlivĂ˝ manaĹľeri by byli peer
    service handlers.

77
4. Synchronization Patterns
  • Radim Vansa

78
Scoped Locking
  • JakĂ˝ má Ăşcel?
  • Zajištuje zamknutĂ­ zámku pred vstupem do kritickĂ©
    sekce a jeho uvolnení po opuštení této sekce
  • ModernĂ­ programovacĂ­ jazyky uĹľ majĂ­ tento koncept
    prĂ­mo jako jazykovĂ˝ konstrukt

// C int foo() lock.acquire() // do
critical // stuff lock.release()
return 0
// Java int foo() synchronized
(lockObject) // do critical //
stuff return 0
// C int foo() lock (lockObject)
// do critical // stuff
return 0
JakĂ˝ je mezi temito kĂłdy rozdĂ­l?
79
Scoped Locking
// C int foo(int bar) lock.acquire()
// do critical // stuff if (bar 42)
return -1 // do another //
critical // stuff lock.release()
return 0
// Java int foo(int bar) synchronized
(lockObject) // do critical //
stuff if (bar 42) return -1 // do
another // critical // stuff return 0
// C int foo(int bar) lock (lockObject)
// do critical // stuff if (bar
42) return -1 // do another //
critical // stuff return 0
  • ProblĂ©my s rucnĂ­m zamykánĂ­m a odemykánĂ­m
  • Ne vĹľdy programátor promyslĂ­ všechny moĹľnĂ© toky
    rĂ­zenĂ­ (control flow) programu
  • Duplikuje se kĂłd

Programátor zapomnel, že se nachází v kritické
sekci zámek zustal zamknut i po jejím opuštení
  • RešenĂ­
  • Odemykat zámek automaticky, jakmile tok rĂ­zenĂ­
    opustĂ­ kritickĂ˝ blok

80
Scoped locking - implementace
  • Co se v C deje automaticky na konci bloku ci
    pri vyvolávání výjimky?
  • VolajĂ­ se destruktory lokálnĂ­ch promennĂ˝ch toho
    mužeme využít

class MutexGuard public MutexGuard(Lock
lock) _lock(lock)
_lock-gtlock() MutexGuard()
_lock-gtunlock() private Lock
_lock MutexGuard(const MutexGuard )
void operator (const MutexGuard )
MutexGuard je zkonstruován na zácátku
synchronizovaného bloku (kritické sekce), uvolnen
je pak uĹľ automaticky
int foo(int bar) // do non-critical stuff
MutexGuard guard(lock) // do
critical stuff if (bar 42)
return -1 // another
critical stuff // another non-critical
stuff return 0
Chceme zabránit kopírování a prirazování
MutexGuardu
81
Scoped Locking - poznámky
  • ExplicitnĂ­ odemykánĂ­
  • acquire() zamkne zámek, pokud je odemcenĂ˝ a
    zapíše si, že nyní byl zamknut
  • release() uvolnuje zámek jen v prĂ­pade, Ĺľe je
    zamcený, a zaznamená, že zámek byl odemcen
  • konstruktor volá acquire(), destruktor release()
  • prĂ­znak uzamknutĂ­ se vyplatĂ­ i v prĂ­pade, Ĺľe
    zamykání zámku muže selhat
  • programátor proto nesmĂ­ volat metody zámku
    prĂ­mo!!!
  • ProblĂ©my
  • deadlock pri rekurzivnĂ­m volánĂ­ metody (bez
    rekurzivnĂ­ho mutexu)
  • reší pattern Thread-safe Interface
  • nezvládne systĂ©movĂ© veci (abort threadu uvnitr
    kritické sekce) ani Cckové longjmp()
  • kompiler vypisuje varovánĂ­ ohledne nepouĹľitĂ©
    lokální promenné
  • pouĹľijeme makro, kterĂ© neco udelá
  • PouĹľitĂ­
  • všechny vetší ucelenĂ© knihovny (Boost,
    Threads.h, ACE)
  • SouvisejĂ­cĂ­ vzory
  • Strategized Locking (modularita), Thread-safe
    Interface (rekurze)

82
Strategized Locking
  • Motivace
  • chceme mĂ­t jednovláknovou verzi systĂ©mu, která se
    nezpomaluje zamykáním, a vícevláknovou verzi,
    která zamyká kritické sekce
  • multiplatformnĂ­ prostredĂ­ s ruznĂ˝mi
    synchronizacnĂ­mi primitivy
  • chceme se vyhnout duplikaci kĂłdu
  • Zpusoby parametrizace
  • polymorfismus konkrĂ©tnĂ­ primitiva jsou známa aĹľ
    za behu
  • templates konkrĂ©tnĂ­ primitiva známá uĹľ behem
    kompilace
  • Realizace
  • navrhneme abstraktnĂ­ rozhranĂ­, kterĂ© bude systĂ©m
    používat
  • je vhodnĂ© použít Guard (Scoped Locking pattern)

83
Strategized locking - polymorfismus
class AbstractLock public void lock()
0 void unlock() 0 class
Guard private AbstractLock
_lock public Guard(AbstractLock lock)
_lock(lock)
_lock-gtlock() Guard()
_lock-gtunlock()
class MutexLock public AbstractLock private
Mutex _mutex public MutexLock(Mutex
mutex) _mutex(mutex) /
override / void lock()
_mutex-gtacquire() / override / void
unlock() _mutex-gtrelease()
class NullLock public AbstractLock public
NullLock() / override / void
lock() / override / void unlock()
84
Strategized locking - templates
Nekteré prekladace umožnují defaultní template
argumenty, v tom prípade je vhodné nastavit je na
nejpravdepodobnejší prípad
class MutexLock private Mutex
_mutex public MutexLock(Mutex mutex)
_mutex(mutex) void lock()
_mutex-gtacquire() void
unlock() _mutex-gtrelease()
class NullLock public NullLock()
void lock() void unlock()
template class Guardltclass LOCKgt private
LOCK _lock public Guard(LOCK lock)
_lock(lock) _lock-gtlock()
Guard() _lock-gtunlock()

85
Strategized locking hybridnĂ­ varianta
  • Varianty
  • pokud nekdy vĂ­me typ uĹľ behem kompilace a nekdy
    ne, muĹľeme zvolit hybrid

class AbstractPolymorficLock public void
lock() 0 void unlock() 0 class
PolymorficMutexLock public
AbstractPolymorficLock private Mutex
_mutex public PolymorficMutexLock(Mutex
mutex) _mutex(mutex)
/ override / void lock()
_mutex-gtacquire() / override / void
unlock() _mutex-gtrelease()
template class Guardltclass LOCKgt private
LOCK _lock public Guard(LOCK lock)
_lock(lock) _lock-gtlock()
Guard() _lock-gtunlock()

PolymorficMutexLock lock ... GuardltAbstractPol
ymorficLockgt guard(lock)
86
Strategized locking - shrnutĂ­
  • VĂ˝hody
  • flexibilita a snadná rozširitelnost
  • jednodušší ĂşdrĹľba, nenĂ­ duplicitnĂ­ kĂłd
  • nezávislost a opetovná pouĹľitelnost (reusability)
  • ProblĂ©my
  • pri pouĹľitĂ­ templates prĂ­liš vyniká strategie
    zámku
  • nekdy aĹľ prĂ­liš flexibilnĂ­ nezkušenĂ˝
    programátor muže omylem zvolit nevhodné
    synchronizacnĂ­ primitivum
  • PouĹľitĂ­
  • v jazycĂ­ch jako C ci Java jsme omezeni na
    polymorfismus
  • Adaptive Communication Environment (ACE)
    opensource framework pro sítové a distribuované
    aplikace
  • ATL (COM objekty)
  • kernel operacnĂ­ho systĂ©mu Dynix/PTX
  • Windows HAL.dll ruznĂ© spinlocky podle poctu
    procesoru

87
Thread-safe Interface
  • Motivace
  • nemáme reentrantnĂ­ zámky a synchronizovanĂ© metody
    volají jiné (synchronizované) metody téhož
    objektu
  • s reentrantnĂ­mi zámky zpusobuje zamykánĂ­ prĂ­liš
    velkĂ˝ overhead

class HashMap private Lock
_lock public void insert(int key, int
value) Guard guard(_lock) if
(value lt 0) return
if (this-gtget(key) -1) // do
insert int get(int key)
Guard guard(_lock) // pick up
return value
Pri volání synchronizované metody se zamceným
zámkem nastane deadlock
  • RešenĂ­
  • verejnĂ© metody POUZE zamykajĂ­ a volajĂ­ vnitrnĂ­
    metody
  • vnitrnĂ­ metody NIKDY nezamykajĂ­

88
Thread-safe Interface - implementace
class HashMap private Lock
_lock public void insert(int key, int
value) Guard guard(_lock) if
(value lt 0) return
this-gt_insert(key, value) int
get(int key) Guard guard(_lock)
return this-gt_get(key) private void
_insert(int key, int value) if
(this-gt_get(key) -1) // do
insert int _get(int key)
// pick up value return value

Vnejší metody jsou synchronizované
Vnejší metoda volá vnitrní metodu - OK
Vnitrní metoda volá vnitrní metodu OK, deadlock
nemuĹľe nastat
89
Thread-safe Interface - varianty
  • Thread-safe Facade
  • Thread-safe Interface pro celĂ˝ systĂ©m komponent
  • je treba refaktorovat systĂ©m, jinak nested
    monitor lockout
  • Thread-safe Wrapper
  • pro trĂ­dy, kterĂ© nepocĂ­tajĂ­ s multithreadingem
  • verejnĂ© metody zamknou zámek, zavolajĂ­
    implementaci a opet uvolnĂ­
  • prĂ­klad java.util.Collections.getSynchronizedMap()

90
Thread-safe Interface - shrnutĂ­
  • VĂ˝hody
  • robustnost snĂ­ĹľenĂ© nebezpecĂ­ self-deadlocku
  • snĂ­ĹľenĂ­ overheadu
  • zjednodušenĂ­ oddelenĂ­ logiky od potreby
    synchronizace
  • ProblĂ©my
  • zvýšenĂ­ poctu metod
  • deadlocku se Ăşplne nevyhneme pri volánĂ­ dalšího
    objektu (muĹľe volat zpet)
  • volánĂ­ privátnĂ­ metody na jinĂ©m objektu tĂ©Ĺľe
    trĂ­dy
  • pevná granularita zámku (per objekt)
  • SouvisejĂ­cĂ­ vzory
  • Decorator transparentne pridává funkcionalitu
  • Scoped Locking, Strategized Locking

91
Double-checked locking
  • Motivace
  • nejaká cást kĂłdu musĂ­ bĂ˝t provedena nanejvýš
    jednou behem behu programu
  • uĹľ jsme videli u Singletonu

NenĂ­ thread-safe
Zbytecný overhead kvuli zamykání
class Singleton private static Singleton
_instance NULL public static
getInstance() if (instance
NULL) _instance
new Singleton() return
_instance
class Singleton private static Singleton
_instance NULL static Lock
_lock public static getInstance()
Guard guard(_lock) if (_instance
NULL) _instance new
Singleton() return instance

92
Double-checked locking
  • ProblĂ©my
  • kompiler muĹľe prohodit poradĂ­ instrukcĂ­
  • cache procesoru na nekterĂ˝ch platformách nejsou
    transparentnĂ­ (Intel Itaniu, COMPAQ Alpha)
  • prirazenĂ­ pointeru nenĂ­ atomickĂ©

class Singleton private static Singleton
_instance NULL static Lock
_lock public static getInstance()
if (_instance NULL)
Guard guard(_lock) if (_instance
NULL) _instance
new Singleton()
return instance
  • RešenĂ­
  • MSVC volatile keyword nebo _ReadWriteBarrier()
  • GCC asm volatile ("""memory") nebo
    __sync_synchronize()
  • ICC __memory_barrier() nebo __sync_synchronize()

93
Double-checked locking C, Java
// C public class Singleton private static
volatile Singleton instance
private static object syncRoot
new Object() private Singleton()
public static Singleton Instance get
if (instance null)
lock (syncRoot)
if (instance null)
instance new
Singleton()
return instance
// Java version 5.0 and higher class Singleton
private static volatile Singleton
instance null private
Singleton() public static Singleton
getInstance() Singleton
result instance if (result null)
synchronized(this)
result instance if (result
null) instance
result new Singleton()
return result

94
Rešení pomocí thread-local promenné
public class Singleton private static object
syncRoot new Object() private static
Singleton globalInstance null
ThreadStaticAttribute private static
Singleton threadLocalInstance null private
Singleton() public static Singleton
Instance get if
(threadLocalInstance null)
lock (syncRoot)
if (globalInstance null)
globalInstance new Singleton()
threadLocalInstance
globalInstance
return threadLocalInstance
Promenná soukromá pro každé vlákno
Prístup k datum spolecným pro všechna vlákna je
synchronizován
95
5. Concurrency Patterns
Bohumír Zámecník
96
Concurrency
  • Concurrency
  • vĂ­ce procesu beží soucasne
  • duvody
  • vyšší vĂ˝kon
  • mĂ©ne cekánĂ­
  • vyuĹľitĂ­ paralelnĂ­ho hardwaru vĂ­c procesoru ci
    jader
  • zdroje problĂ©mu
  • sdĂ­lenĂ­ zdroju mezi procesy
  • nedeterminismus

Když si nedáme pozor, muže dojít k poškození dat
ci deadlocku!
97
Možné rešení Concurrency Patterns
  • Active Object
  • Monitor Object
  • Half-Sync/Half-Async
  • Leader/Followers
  • Thread-Specific Storage
  • Pattern-Oriented Software Architecture
  • Patterns for Concurrent and Networked Objects,
    Volume 2
  • Douglas Schmidt, Michael Stal, Hans Rohnert and
    Frank Buschmann
  • John Wiley Sons, 2000
  • kapitola 5 Concurrency Patterns

98
Klasifikace Concurrency Patterns
  • Design Patterns
  • Active Object
  • Monitor Object
  • Thread-Specific Storage
  • Architectural Patterns
  • Half-Sync/Half-Async
  • Leader/Followers

99
Active Object
100
Active Object návrhový vzor
  • Kontext
  • vĂ­ce klientu beží v samostatnĂ˝ch vláknech a
    pristupuje ke sdílenému objektu
  • Ăšcel
  • zjednodušit soubeĹľnĂ© prĂ­stupy k objektu, kterĂ˝
    žije ve vlastním vlákne
  • oddelit volánĂ­ metody na tomto objektu od jejĂ­ho
    vykonání
  • PrĂ­klad komunikacnĂ­ brána
  • procesy ze dvou komponent chtejĂ­mezi sebou
    komunikovat, alenechtejí být na sobe prímo
    závislé

Active Object An Object Behavioral Pattern for
Concurrent Programming, R. Greg Lavender, Douglas
C. Schmidt
101
Active Object problémy
  • ProblĂ©my
  • nechceme, aby nárocnejší metody blokovaly celĂ˝
    systém
  • synchronizovanĂ˝ prĂ­stup ke sdĂ­lenĂ˝m objektum musĂ­
    být transparentní
  • chceme využít paralelnĂ­ hardware vĂ­ce jader a
    procesoru
  • chceme, aby celĂ˝ systĂ©m byl škálovatelnĂ˝
  • RešenĂ­

Oddelíme volání metody od jejího vykonání!
102
Active Object struktura
103
Active Object dynamické chování
Active Object An Object Behavioral Pattern for
Concurrent Programming, R. Greg Lavender, Douglas
C. Schmidt
104
Active Object varianty
  • VĂ­ce rolĂ­
  • ruzná rozhranĂ­ pro vĂ­ce druhu klientu, vĂ­c
    rozširitelné
  • IntegrovanĂ˝ Scheduler
  • práci Proxy a Servanta delá Scheduler
  • jednoduší implementace, hur znovupouĹľitelnĂ©
  • PredávánĂ­ zpráv
  • logika Proxy a Servanta mimo Active Object
  • vĂ­c práce pro programátory aplikace, vĂ­c chyb
  • VolánĂ­ metod s casovĂ˝m limitem
  • PolymorfnĂ­ návratová hodnota (Future)
  • DistribuovanĂ˝ Active Object
  • rozdelenĂ­ Proxy na Stub a Skeleton
  • podobnĂ˝ je vzor Broker, ale ten pracuje s mnoha
    Servanty
  • Active Object s Thread Poolem Servantu
  • lepší paralelismus, muĹľe bĂ˝t nutnĂ© synchronizovat

105
Active Object prĂ­klady pouĹľitĂ­
  • KomunikacnĂ­ brána
  • Casovac v Jave
  • java.util.Timer a java.util.TimerTask
  • zjednodušenĂ˝ Active Object
  • PrĂ­klad ze Ĺľivota restaurace
  • Client zákaznĂ­k
  • Proxy cíšnĂ­ci a servĂ­rky
  • Scheduler šéfkuchar
  • Servant kuchar
  • Activation Queue seznam jĂ­del k prĂ­prave

106
Active Object souvislosti
  • Method Request
  • je moĹľno povaĹľovat za instaci vzoru Command
  • Activation Queue
  • muĹľe bĂ˝t implementována s pomocĂ­ vzoru Robust
    Iterator
  • Scheduler
  • je instancĂ­ vzoru Command Processor
  • pro vĂ­ce plánovacĂ­ch politik je moĹľno použít
    Strategy
  • Future
  • muĹľe bĂ˝t implementována pomocĂ­ vzoru Counted
    Pointer

107
Active Object shrnutĂ­
  • VĂ˝hody
  • volánĂ­ a vykonávánĂ­ metod probĂ­há v ruznĂ˝ch
    vláknech
  • zjednodušenĂ­ sloĹľitĂ© synchronizace
  • metody se vykonávajĂ­ v jinĂ©m poradĂ­, neĹľ byly
    volány
  • ruznĂ© strategie pro plánovánĂ­ poradĂ­
  • je moĹľnĂ© rozšírit pro distribuovanĂ© pouĹľitĂ­
  • NevĂ˝hody
  • reĹľie
  • prepĂ­nánĂ­ kontextu
  • synchronizace
  • kopĂ­rovánĂ­ dat
  • sloĹľitejší plánovánĂ­ v Scheduleru
  • sloĹľitĂ© debugovánĂ­
  • Kdy je Active Object vhodnĂ˝?
  • pri práci s relativne velkĂ˝mi objekty
  • jinak použít spíš Monitor Object

108
Monitor Object
Theodore Norvell, http//en.wikipedia.org/wiki/Fil
eMonitor_28synchronization29-SU.png
109
Monitor Object návrhový vzor
  • Kontext
  • vĂ­ce vláken volá soucasne metody na stejnĂ©m
    objektu
  • objekt sám žádnĂ© vlákno nemá (je pasivnĂ­)
  • volánĂ­ metody probĂ­há ve klientove vlákne
  • Ăšcel
  • serializovat soubeĹľnĂ© volánĂ­ metod na objektu
  • tĂ­m vynutit, aby s objektem pracovala vĹľdy nejvýš
    jedna metodav jediném vlákne
  • PrĂ­klad
  • komunikacnĂ­ brána ze vzoru Active Object
  • pro malĂ© objekty muĹľe bĂ˝t overhead Active Objectu
    príliš velký
  • sloĹľitá plánovacĂ­ strategie nemusĂ­ bĂ˝t potreba

110
Monitor Object problémy
  • ProblĂ©my
  • soucasnĂ© volánĂ­ metod objektu muĹľe poškodit jeho
    vnitrnĂ­ stav
  • race conditions
  • podobne jako interface je nutnĂ© definovat
    synchronizacnĂ­ hranice
  • chceme transparentnĂ­ synchronizaci
  • aby klient nemusel používat low-level primitiva
  • má-li metoda blokovat, musĂ­ se dobrovolne vzdát
    rĂ­zenĂ­
  • ochrana proti deadlocku a zbytecnĂ©mu cekánĂ­
  • pred uspánĂ­m a probuzenĂ­m musĂ­ bĂ˝t objekt v
    korektnĂ­m stavu

111
Monitor Object struktura
112
Monitor Object dynamické chování
Monitor Object An Object Behavioral Pattern for
Concurrent Programming, Douglas C. Schmidt
113
Monitor Object varianty
  • Timed Synchronized Method Invocations
  • casovĂ˝ limit na cekánĂ­
  • Strategized Locking
  • flexibilnĂ­ konfigurace zámku a podmĂ­nek
  • Multiple Roles
  • objekt implementuje vĂ­ce rolĂ­ pro ruznĂ© skupiny
    klientu
  • klient vidĂ­ z objektu jen specifickĂ© rozhranĂ­
  • lepší rozširitelnost

114
Monitor Object prĂ­klady
  • Dijkstra Monitor, Hoare Monitor
  • Monitory na objektech v Jave
  • PrĂ­klad ze Ĺľivota fast food restaurace

Java
Hoare Monitor
115
Monitor Object shrnutĂ­
  • VĂ˝hody
  • jednoduchĂ© rĂ­zenĂ­ konkurence
  • jednodušší plánovánĂ­, kde se majĂ­ metody
    vykonávat
  • kooperativnĂ­ plánovánĂ­
  • pouĹľitĂ­ podmĂ­nek
  • NevĂ˝hody
  • omezená škálovatelnost
  • sloĹľitá zmena synchronizacnĂ­ch mechanizmu a
    politik
  • tesná vazba mezi funkcnostĂ­ a logikou
    synchronizace a plánování
  • nelze znovu použít implementaci s jinĂ˝mi
    synchronizacnĂ­mi mechanizmy
  • problĂ©my s vnorovánĂ­m Nested Monitor Lockout

116
Active Object vs. Monitor Object
  • Monitor Object a Active Object delajĂ­ podobne
    veci, ale trochu se liší
  • Active Object
  • sloĹľitejší
  • metody beží v jinĂ©m vlákne neĹľ klient
  • sofistikovanejší, ale dražší vykonávánĂ­ a prĂ­jem
    nových požadavku
  • kvuli vetší reĹľii se hodĂ­ spíš na vetší objekty
  • asynchronnĂ­ zĂ­skánĂ­ vĂ˝sledku
  • lĂ©pe rozširitelnĂ˝
  • Monitor Object
  • jednodušší
  • metody beží ve vlákne klienta
  • menší reĹľie, hodĂ­ se i na menší objekty
  • tesnejší vazba mezi funkcionalitou a
    synchronizacnĂ­ logikou

117
Half-Sync/Half-Async
http//homes.bio.psu.edu/people/faculty/bshapiro/s
piral-clock.jpg
118
Half-Sync/Half-Async architektonickĂ˝ vzor
  • Kontext
  • vĂ­cevláknovĂ˝ systĂ©m s komunikacĂ­ synchronnĂ­ch a
    asynchronnĂ­ch sluĹľeb
  • Ăšcel
  • zjednodušit pouĹľitĂ­ takovĂ˝ch sluĹľeb bez ztráty
    výkonnosti
  • PrĂ­klad
  • sĂ­továnĂ­ v BSD UNIXu

Half Sync/Half Async, Douglas C. Schmidt, 1998
119
Half-Sync/Half-Async problémy
  • ProblĂ©my
  • synchronnĂ­ zpracovánĂ­ sluĹľeb
  • jednodušší programovánĂ­, ale muĹľe dlouho blokovat
  • typicky high-level sluĹľby
  • asynchronnĂ­ zpracovánĂ­ sluĹľeb
  • sloĹľitejší programovánĂ­, moĹľnost vyššího vĂ˝konu
  • nekdy je vynuceno prĂ­mo hardwarem
  • typicky low-level sluĹľby
  • tyto sluĹľby spolu potrebujĂ­ komunikovat
  • jak to vše skloubit?

120
Half-Sync/Half-Async struktura
  • RešenĂ­
  • rozdelit systĂ©m na synchronnĂ­ a asynchronnĂ­
    vrstvu
  • mezi ne vloĹľit komunikacnĂ­ mezivrstvu s frontou

Half Sync/Half Async, Douglas C. Schmidt, 1998
121
Half-Sync/Half-Async dynamické chování
Half Sync/Half Async, Douglas C. Schmidt, 1998
122
Half-Sync/Half-Async varianty
  • Varianty
  • AsynchronnĂ­ rĂ­zenĂ­, synchronnĂ­ data
  • Half-Async/Half-Async
  • asynchronnĂ­ zpracovánĂ­ je prĂ­stupnĂ© i pro
    high-level sluĹľby
  • Half-Sync/Half-Sync
  • synchronnĂ­ zpracovánĂ­ i pro low-level sluĹľby
  • vĂ­ce vláken v jádre OS
  • prĂ­klady Mach, Solaris
  • Half-Sync/Half-Reactive
  • v objektove orientovanĂ˝ch systĂ©mech
  • sloĹľenĂ­ vzoru Reactor a Active Object s thread
    poolem
  • asynchronnĂ­ vrstva Reactor
  • mezivrstva Activation Queue
  • synchronnĂ­ vrstva Servant
  • Souvislosti
  • vrstvenĂ­ v Half-Sync/Half-Async je prĂ­kladem
    vzoru Layers

123
Half-Sync/Half-Async prĂ­klad
PrĂ­klad z BSD UNIXu
Sync TELNETDProcess
Sync HTTPDProcess
Sync FTPDProcess
SynchronnousService Layer
1 read(data)
4 sbwait()
read()
2 soreceive()
soreceive()
Queueing Layer
put to sleep
awake
sbwait()
sowakeup()
Socket Queues
3, 8 dequeue(data)
7 sowakeup()
AsynchronnousService Layer
Async TCP/IPProtocol Processing
EthernetNetwork Interface
5 interrupt
6 enqueue(data)
Pattern-Oriented Software Architecture Patterns
for Concurrent and Networked Objects, Volume 2,
D. Schmidt, M. Stal, H. Rohnert and F. Buschmann,
Wiley, 2000
124
Half-Sync/Half-Async shrnutĂ­
  • Princip
  • oddelenĂ­ synchronnĂ­ch a asynchronnĂ­ch sluĹľeb do
    dvou vrstev
  • VĂ˝hody
  • jednodušší programovánĂ­ synchronnĂ­ch sluĹľeb pri
    zachování výkonnosti
Write a Comment
User Comments (0)
About PowerShow.com