PV178 jaro 2011  Prečo používať thready? ◦ Izolovať kód od ostatného kódu ◦ Zjednodušiť si písanie kódu ◦ Dosiahnuť súbežné vykonávanie  Ako často používať thready? ◦ Lacnejšie ako process ale, nie sú zadarmo ◦ Každý thread dobre zvážiť ◦ Explicitne thready nepoužívať!!  Optimalizované prideľovanie  Recyklácia  Heurestika ◦ Threadpool.QueueUserWorkItem(); ◦ Alebo! ◦ Task Parallel Library  Výzva, vyžaduje prečítať viac ako jednu knihu o programovaní  Synchronizace, false-sharing..  Dekompozice: ◦ Dátova (Data decompozition) ◦ Úlohová (Task decompozition)  Nástroj: Task Paralel Library  AK nemáme závislosť medzi taskmi ale máme ich viacero rovnakých: Parallel.ForEach(customers, customer =>ComputeStatistics(customer)..);  Parallel.For, Parallel.Invoke(array of Actions)  Ľahko sa používa ale: ◦ Rozdeľme úlohy tak aby každý CPU pracoval, ale nie viac ako tak aby každý CPU pracoval ◦ Rozdeľme úlohy tak aby v každej úlohe bolo čo najviac práce  Využívajú ThreadPool, ale ponúkajú navyše: ◦ Stav operace: task state- completed, faulted, waitingForChildren, cancelled ◦ Výsledok: t.Result ◦ Štruktúru: parent čaká na child tasky, alebo task.Wait()  new Task(Action).Start();  WaitAll(), WaitAny(),  Kolekce výnimiek z kolekce Taskov  Umožňuje vrátiť Thread do ThreadPool  InnerExceptions (nie InnerException)  Vyhodená len pri Wait a Result, alebo pri Parallel metódach, inak ako Unobserved terminuje process  Začatie tasku okamžite po dokončení iného: Task t = new Task(n=>Sum(n)); t.ContinueWith(task => Console.WriteLine(task.Result), TaskContinuationOptions);  Child Tasky: ◦ Parrent task nie je Completed kým nie sú všetky child Completed (WaitingForCHildrenToComplete)  Parameter konstruktoru Tasku  Výčet: ◦ PreferFairness ◦ LongRunning ◦ AttachedToParrent  TiežTaskContinuationOptions ◦ ExecuteSynchroniously ◦ NotOnFaulted ◦ NotOnCancelled ◦ NotOnRanToCompletion  Niekedy chceme vytvárať viac Taskov s podobnými parametrami ◦ Napríklad aby všetky boli child a continuation  Použijeme TaskFactory ◦ Všetky tasky z jednej faktory zdieľajú rovnaké nastavenie  Created  WaitingForActivation  WaitingToRun  Running  WaitingForChildrenToComplete  RanToCompletion  Canceled  Faulted  Kooperatívny vzor pre zrušenie prebiehajúcich taskov  CancellationTokenSource a Property Token  Token signalizuje po volaní Cancel na CTS  Periodicky testujeme Token na IsCancellationRequested  Parallel LINQ to Objects  Deklaratívne použitie Parallel metód  Pomocou extension metódy AsParallel konvertujeme z IEnumerable na ParallelQuery  Výsledok môžme paralelne spracovať pomocou extension metódy ForAll  Ak potrebujeme periodicky alebo v daných časových momentoch volať metódy  Timer použije ThreadPool vlákno k vykonaniu metódy v danom čase  Namespace System.Threading.Timer ◦ public Timer(callback, state, dueTime, period)  Nástroj pre vývoj a nasadzovanie služieb vo Windows  Nachádza sa v System.ServiceModel  Framework pre budovanie aplikácií, ktoré komunikujú  Používame od medziprocesovej po internetovú komunikáciu  Služba je zverejnené jednotka funkcionality  Služby používame pre vývoj distribuovaných aplikácií, princíp SOA  Služby a klienti interagujú cez posialanie správ  Správy sú zväčša SOAP  Používajú mnoho transportov, nie len http  Definícia služby a technológie/standardu pre prenos správ služby je oddelená – transparentná  Poskytuje Metadata – môže komunikovať aj s non-WCF službami a klientmi  Klient vždy používa proxy pre komunikovanie so službou  Proxy poskytuje rovnaké metódy ako službazaobaľuje serializaci a réžiu komunikace  Svcutil.exe vygeneruje kód klientskej proxy zo skompilovaného kódu služby  Vytvoriť WCF službu znamená definovať hlavne: ◦ Adresu služby - URI ◦ Binding – vybraťprotokol (prípadne nastaviť) ◦ Contract – definícia zverejnenej funkcionality  Týmto sme definovali Endpoint  Určuje kde sa služba nachádza  ://[:port]/[path] ◦ Príklady: http://example.com/ServiceA net.msmq://localhost  Musí byť unikátna pre každý endpoint  Určuje ako pristupovať k službe  Transportný protokol: ◦ TCP ◦ HTTP ◦ Name pipe ◦ MSMQ  Kódovanie a formát správy  Bezpečnosť  ....  Určuje čo služba poskytuje  Definuje operace zverejnené službou  Pomocou atribútov ◦ Trieda ktorá predstavuje službu sa označí  [ServiceContract] ◦ Metódy tejto triedy ktoré chceme zverejniť  [OperationContract]  Ak potrebujeme aby služba používala komplexný typ  DataContractSerializer serializuje náš typ do XML pre prenos  Definujeme pomocou atribútov podobne ako pri Service Contract ◦ [DataContract] ◦ [DataMember]  IIS  Narozdiel od webových služieb WCF služby možme hostovať aj vo vlastnom procese ◦ Class ServiceHost  WCF služba môže byť stavová  Endpointy a ostatné nastavenia sa dajú zadaťaj v konfigurácii ◦ VS2010 obsahuje konfiguračné klikátko