Maj 2003Bedre brugergrænseflader med multithreading1 Carsten Juel Andersen Softwarearkitekt Mobil: 2348 0003 Captator Tlf: 8748 0202

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Velkommen til Softwarekonstruktion
1 GUI Programmering i.NET WinForms. Mål “.NET supports two types of form-based apps, WinForms and WebForms. WinForms are the traditional, desktop GUI.
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner.
Microsoft Windows.NET Compact Framework Niels Hilmar Madsen Developer & Platform Strategy Group Microsoft Danmark.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
13 – Database med JDBC. 2 NOEA2009Java-kursus – JDBC JDBC JDBC er et standard bibliotek til at tilgå relational databaser API’et er en standardiseret.
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
12 – GUI med Swing. 2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector.
Hvordan man skriver koden.
Mød Microsoft – for udviklere & arkitekter Hvad er smarte klienter? - definitioner og principper.Henrik Lykke Nielsen Captator – de danske.NET eksperter.
Tietgen Skolen Syntaks: while ( betingelse for loop ) statement; Eksempel: int tal = 0; while ( tal/3 != 4 ) { System.Console.WriteLine(tal); tal = tal.
Tietgen Skolen Trick med facadeklasse og serialisering ”Trick” – model ”samles” til eet overordnet objekt Alle klasser i model skal have attriutten [Serializable]
WCF service Hostet på website x. Opret tomt web applikations projekt.
Tråde og synkronisering. Tråde To typer tråde Dedikerede tråde -programmør opretter og tilknytter metode -”kører tråd-metoden (job) én gang” Tråd pulje.
Tilstandsstyring/Otto Knudsen 1 Tilstandsstyring Motivation ViewState EventTarget, EventArgument.
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Distribution af funktionalitet Webservice med WCF x.
Distribution af funktionalitet Webservice med WCF x.
Hvorfor trådning? Performance Responsivness. Succeskriterier Forbedring af performance –Opgaverne skal være uafhængige –Jo flere afhængige opgaver, jo.
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Abstrakte klasser og interfaces i Java
Programering af mobile enheder Windows Phone Storage.
Lasse Steensgaard [xls]Opsamlende forelæsning på W2, 2. april 2003slide 1 HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner,
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Maj 2005Embedded.NET1 Embedded.NET Introduktion til.NET framworket og.NET Compact Frameworket Captator Tlf: Carsten Juel Andersen.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Anvendelser I Leg og spil.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Samtidighed. Disposition Formål med tråde Eksempel på fordel ved tråde Thread-pooling Livscyklus Problemstillinger Algoritmer ◦Dekkers ◦Peterson Opsumering.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIProgrammering af Store Systemer1 Concurrency i Java – Samarbejdende tråde.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Parallel programming Rasmus D. Lehrmann DM
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering.
Præsentationens transcript:

maj 2003Bedre brugergrænseflader med multithreading1 Carsten Juel Andersen Softwarearkitekt Mobil: Captator Tlf:

maj 2003Bedre brugergrænseflader med multithreading2 Agenda Hvorfor multithreading ? Multithreading i.NET Tråde, threadpool, asynkrone metodekald Objekt integritet - Safety kontra liveness Eksklusiv adgang Synkronisering Deadlocks Multithreading i Window Forms UI Single Threaded Apartment modellen Eksempler på multithreading i Windows Forms UI Til inspiration for hvordan multithreading kan benyttes

maj 2003Bedre brugergrænseflader med multithreading3 Hvorfor multithreading ? Fordele Forbedrede svartider Simplere programdesign – hver tråd sit ”arbejdsområde” Men der er også ulemper Flere faldgrupper – race conditions og deadlocks Forkert design kan forårsage de ”sjoveste” fejl (som kan være meget svære at finde) Større ”throughput” Få det maksimale ud af computeren Multiprocessor maskiner, hyper threading !

maj 2003Bedre brugergrænseflader med multithreading4 Fra single- til multithreaded applikation Flere samtidige I/O operationer File, netværk, webservices etc. Indlæs fil1 Indlæs fil2 Indlæs fil3 Indlæs fil1 Indlæs fil2 Indlæs fil3 Start tråd1 Start tråd2 Start tråd3 Afvent tråd1 Afvent tråd2 Afvent tråd3 Start tråd1 Start tråd2 Start tråd3 Afvent tråd1 Afvent tråd2 Afvent tråd3 Indlæs fil1 Indlæs fil2 Indlæs fil3

maj 2003Bedre brugergrænseflader med multithreading5 Start og join af tråde Thread demo Start et antal tråde og afvent at alle tråde afsluttes thread = New System.Threading.Thread(AddressOf ProcessThread) thread.Start()... ' Afvent at tråd afslutter thread.join() ' Alternativt – afvent på tråd afslutter eller timeout If Not thread.Join(New System.TimeSpan(0, 0, 2)) Then ' Afsluttede ikke indenfor 2 sekunder End If thread = New System.Threading.Thread(AddressOf ProcessThread) thread.Start()... ' Afvent at tråd afslutter thread.join() ' Alternativt – afvent på tråd afslutter eller timeout If Not thread.Join(New System.TimeSpan(0, 0, 2)) Then ' Afsluttede ikke indenfor 2 sekunder End If Private Sub ProcessThread()... End Sub Private Sub ProcessThread()... End Sub

maj 2003Bedre brugergrænseflader med multithreading6 Thread pool Thread pools er et velkendt design pattern i forbindelse med multithreading Minimerer resourceoverheadet ved brug af tråde.NET har en indbygget thread pool Opretter 25 ”arbejds”-tråde første gang den benyttes Sæt arbejdsopgave1 i kø Sæt arbejdsopgave2 i kø Sæt arbejdsopgave3 i kø Afvent at de afslutter Sæt arbejdsopgave1 i kø Sæt arbejdsopgave2 i kø Sæt arbejdsopgave3 i kø Afvent at de afslutter Indlæs fil1 Indlæs fil2 Indlæs fil3

maj 2003Bedre brugergrænseflader med multithreading7 Thread pool Thread pool demo En tråd i thread pool afslutter ikke når ”arbejdet” er fuldført, derfor kan join ikke benyttes threadCallback = New System.Threading.WaitCallback( _ AddressOf ProcessThread) System.Threading.ThreadPool.QueueUserWorkItem( _ threadCallback, fileName)... ' Egen logik benyttes i stedet for join ' ProcessEnded er en lokal property (der ikke er vist her) While Not ProcessEnded System.Threading.Thread.Sleep(10) End If threadCallback = New System.Threading.WaitCallback( _ AddressOf ProcessThread) System.Threading.ThreadPool.QueueUserWorkItem( _ threadCallback, fileName)... ' Egen logik benyttes i stedet for join ' ProcessEnded er en lokal property (der ikke er vist her) While Not ProcessEnded System.Threading.Thread.Sleep(10) End If Private Sub ProcessThread(state As Object)... _ProcessEnded = True End Sub Private Sub ProcessThread(state As Object)... _ProcessEnded = True End Sub

maj 2003Bedre brugergrænseflader med multithreading8 Asynkrone kald Alle delegates kan kaldes asynkront Derved afvikles delegaten på en tråd fra threadpoolen Simplere at benytte end direkte brug af threadpoolen Public Function IndlaesTextFil( _ ByVal fileName As String) As String... End Function Public Function IndlaesTextFil( _ ByVal fileName As String) As String... End Function Indlaes TextFil Delegate Indlaes TextFil Delegate IndlaesTextFil() Opret delegate, der peger på funktionen IndlaesTextFilDelegate.Invoke() Opret delegate, der peger på funktionen IndlaesTextFilDelegate.Invoke() Opret delegate, der peger på funktionen IndlaesTextFilDelegate.BeginInvoke()... IndlaesTextFilDelegate.EndInvoke() Opret delegate, der peger på funktionen IndlaesTextFilDelegate.BeginInvoke()... IndlaesTextFilDelegate.EndInvoke()

maj 2003Bedre brugergrænseflader med multithreading9 Asynkrone kald Asynkron delegates demo NB: Enhver metode kan kaldes asynkront ! ”pak metoden ind” i en delegate og kald delegaten asynkront Dim res As System.IAsyncResult ift = New IndlaesTextFilCallback(AddressOf IndlaesTextFil)... res = ift.BeginInvoke("..\MainForm.vb", Nothing, Nothing) result = ift.EndInvoke(res) Dim res As System.IAsyncResult ift = New IndlaesTextFilCallback(AddressOf IndlaesTextFil)... res = ift.BeginInvoke("..\MainForm.vb", Nothing, Nothing) result = ift.EndInvoke(res) Public Delegate Function IndlaesTextFilCallback( _ ByVal fileName As String) As String Public Delegate Function IndlaesTextFilCallback( _ ByVal fileName As String) As String Public Function IndlaesTextFil( _ ByVal fileName As String) As String... End Function Public Function IndlaesTextFil( _ ByVal fileName As String) As String... End Function

maj 2003Bedre brugergrænseflader med multithreading10 Race conditions En race condition kan opstå når flere tråde deler data Uhyre simpelt eksempel Kan det virkelig gå galt ? While True _lt.Naeste() End While While True _lt.Naeste() End While Public Class LigeTal Private _tal As Integer Public Function Naeste() As Integer _tal += 1 Return _tal End Function End Class Public Class LigeTal Private _tal As Integer Public Function Naeste() As Integer _tal += 1 Return _tal End Function End Class En sjælden gang imellem læses et ulige tal ! While True _lt.Naeste() End While While True _lt.Naeste() End While JA !

maj 2003Bedre brugergrænseflader med multithreading11 Objekt integritet Race conditions må ikke kunne opstå Så betegnes systemet som ”safe” Der kan ikke opstå race conditions, hvis der er eksklusiv adgang til alle data (en tråd af gangen) Der er 3 måder at opnå eksklusiv adgang på Eliminer datadeling mellem tråde Dynamisk sikring via synkronisering Strukturel sikring Eksempel på strukturel: Immutable objekter - en tråd opbygger et immutable objekt, først når det er færdigbygget stilles det til rådighed for andre. (se næste slide) (se følgende slides)

maj 2003Bedre brugergrænseflader med multithreading12 Eliminer datadeling mellem tråde Undgå at dele data mellem tråde Lokale variable valuetype parametre, variable i metoder Thread-relative static = En class/module variabel, der har en værdi for hver tråd Thread local Storage Thread.AllocateNamedDataSlot(”id”)

maj 2003Bedre brugergrænseflader med multithreading13 Synkronisering Synkronisering garanterer At kun en tråd er indenfor synkroniseringslåsens område Andre tråde må vente udenfor synkroniseringsområdet Ethvert objekt kan benyttes som synkroniseringslås (dog ikke valuetypes) C# syntaks lock public int Naeste() { lock(this) { _tal++; return _tal; } public int Naeste() { lock(this) { _tal++; return _tal; }

maj 2003Bedre brugergrænseflader med multithreading14 Synkronisering VB.NET SyncLock Lock() / SyncLock er blot en syntaks ovenpå klassen System.Threading.Monitor Men mere ”sikker”, fordi den garanterer balance mellem Enter og Exit monitor kald Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer Try Monitor.Enter(Me) _tal += 1 Return _tal Finally Monitor.[Exit](Me) End Try End Function Public Function Naeste() As Integer Try Monitor.Enter(Me) _tal += 1 Return _tal Finally Monitor.[Exit](Me) End Try End Function

maj 2003Bedre brugergrænseflader med multithreading15 ”Safe” kontra ”Liveness” Vi kan lave en garanteret multithread ”safe” applikation Ved at synkronisere på alt MEN så er det på bekostning af ”Liveness” Alle tråde bliver ”serialiserede” og performance bliver sandsynligvis endda dårligere end i en tilsvarende singlethreaded applikation OG så ender det nok også i en Deadlock Public Class EnKlasse Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function End Class Public Class EnKlasse Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function End Class Public Class EnSmfrmKlasse Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function End Clkass Public Class EnSmfrmKlasse Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function Public Function Naeste() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End Public Function Foregaaende() As Integer SyncLock Me _tal += 1 Return _tal SyncLock End End Function End Clkass En tråd En anden tråd

maj 2003Bedre brugergrænseflader med multithreading16 Multithreading i Windows Forms Windows Forms kontroller er kun beregnet til at blive afviklet på den tråd, de er oprettet af så vi må blot sørge for at alt opdatering af kontroller foregår på den oprindelige tråd Start tråd1 Indlæs fil1 Opdater UI

maj 2003Bedre brugergrænseflader med multithreading17 Multithreading i Windows Forms Demo af Invoke på en Windows Forms kontrol thread = New System.Threading.Thread(AddressOf ProcessThread) thread.Start() thread = New System.Threading.Thread(AddressOf ProcessThread) thread.Start() Private Sub ProcessThread() Dim fileContent As String = FileUtil.IndlaesTextFil(_fileName) _txtBox.Invoke(New UpdateTxtBoxCallback(AddressOf UpdateTxtBox), _ New Object() {fileContent}) End Sub Private Sub ProcessThread() Dim fileContent As String = FileUtil.IndlaesTextFil(_fileName) _txtBox.Invoke(New UpdateTxtBoxCallback(AddressOf UpdateTxtBox), _ New Object() {fileContent}) End Sub Private Sub UpdateTxtBox(ByVal text As String) _txtBox.Text = text End Sub Private Sub UpdateTxtBox(ByVal text As String) _txtBox.Text = text End Sub Private Delegate Sub UpdateTxtBoxCallback(ByVal text As String)

maj 2003Bedre brugergrænseflader med multithreading18 Eksempel 1 – progressbar Progress bar med cancel mulighed F.eks. ved import / export af data, beregninger eller andre længerevarende jobs Med mulighed for at afbryde og rulle baglæns ProcessProgressNotifier NotifyStartProcess NotifyProcessProgress NotifyEndProcess ProcessProgressNotifier NotifyStartProcess NotifyProcessProgress NotifyEndProcess ProgressForm Længerevarende Job Cancel request

maj 2003Bedre brugergrænseflader med multithreading19 Eksempel 2 - hurtig opstart Applications container - en ramme for en applikation En applikationsplugin indeholder selve funktionaliteten Konfigurationsfil afgør hvilke plugins, der skal startes op Loadtid for plugins kunne i princippet være meget lang ApplicationContainer Plugin LibraEditing:Captator.Eifos.Libra.Editing.DocumentPlugin Plugin LibraEditing:Captator.Eifos.Libra.Editing.DocumentPlugin ApplicationsPlugin1 ApplicationsPlugin2 Create via reflektion CreateApplicationPlugin(this) Ved at benytte asynkron delegate kan ApplicationContaineren tegne Formen mens de enkelte plugins loades Resultat: Hurtig bruger feedback uanset loadtid for plugins

maj 2003Bedre brugergrænseflader med multithreading20 Spørgsmål nyheder, artikler, information,...