Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
Polymorfismus Dědičnost
C# pro začátečníky Mgr. Jaromír Osčádal
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Fronty (Queue) v JDK 1.5 (1.6) Java.vse.cz.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
C# - Exceptions (výjimky)
Objektové programování
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Síťové programování Informační technologie - praxe SPŠE V úžlabině Jan Klepal, Mgr. Radka Müllerová Verze 2.
6. cvičení Polymorfismus
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
13AMP 3. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled I. Co je to kontext úlohy Co je to kontext úlohy Task switching (přepnutí úlohy)
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
13/04/20151 Multitasking Schopnost operačního systému mít spuštěno více programů současně Operační systém používá hardwarové hodiny a každému běžícímu.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Pokročilé programování v C++ (část B)
PŘÍKAZ while úkol 1_42.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Základy operačních systémů Meziprocesová komunikace a synchronizace Jakub Yaghob.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
.NET framework platforma Jiří Pokorný
Y36PJC Programování v jazyce C/C++
Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Y36PJC Programování v jazyce C/C++
Návrhový vzor Flyweight
Polymorfismus = Mnohotvarost
C# Vícevláknové aplikace
Bridge.
Reflexe jako introspekce
Přednášky z distribuovaných systémů
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Přednášky z Distribuovaných systémů
Transkript prezentace:

Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě

Obsah Představení jazyka C#  Rozdíly C# oproti Javě .NET Framework Vlákna v C# Synchronizace Shrnutí

Jazyk C# Striktně objektově orientovaný jazyk  Vše je objekt Neumožňuje přístup do paměti  Umožňuje však rozlišení řízeného a neřízeného kódu (využití kódu napsaného např. v C nebo C++)  Garbage Collector (podobně jako v Javě) Založený na jazycích Visual C++, Java, Delphi Vyvinut společností Microsoft Má ISO normu (ISO/IEC 23270) Hlavní programovací jazyk pro platformu.NET Framework  V porovnání s ostatními.NET jazyky má největší možnosti.NET1.0,.NET 1.1,.NET 2.0,.NET 3.0,.NET 3.5  V souvislosti s rozvojem.NET frameworku se rozvíjí i C#  Podstatné rozšíření v.NET 2.0 (genericita, nulovatelné typy, neúplné třídy, anonymní metody, …)

Rozdíly C# oproti Javě (1) Rozdílné konvence a pojmenování některých klíčových slov  např. sealed – final, bool – boolean, internal – proteced, lock – synchronized, namespace – package, using – import C# umožňuje předávání parametrů nejen hodnotou (jako v Javě), ale i odkazem (referencí) C# umožňuje definovat třídu na více místech (partial class), výhodné pro generování GUI pomocí IDE C# nabízí nulovatelné typy int? pocet = null; pocet = 10; if (pocet.HasValue) { // příkazy }

Rozdíly C# oproti Javě (2) C# umožňuje používat delegáty  „objektové zapouzdření odkazů na metody“, v C++ obdobou ukazatele na funkce  delegáty se využívají hojně také ve vícevláknových aplikacích delegate bool Filter(char c); public static bool IsDigit(char c) { // příkazy } Filter f = new Filter(IsDigit); if (f(c)) { // příkazy }

Rozdíly C# oproti Javě (3) C# pracuje s tzv. vlastnostmi (properties) – obdoba getterů a setterů v Javě private int pocet; public int Pocet { get { // zde mohou být další příkazy // obdobně jako v getteru v Javě return pocet; } set { // zde mohou být další příkazy // obdobně jako v setteru v Javě pocet = value; }

.NET Framework Platforma společnosti Microsoft pro tvorbu aplikací  Aplikace primárně určené pro Windows  Aplikace serverové, klientské, pro mobilní zařízení nebo embedded Podpora vývoje webových aplikací a webových služeb Architektura  Programovat se dá v řadě jazyků – C#, J#, Visual Basic, C++... (mnoho jazyků jsou jazyky implementované třetími stranami – Haskell, Mercury, Smalltalk...)  Common Language Infrastructure Kód napsaný v jakémkoli podporovaném jazyce se přeloží do CIL (Common Intermediate Language) Common Language Runtime přeloží kód z Common Intermediate Language do binárního kódu spustitelného na dané platformě

Vlákna v jazyce C# Namespace System.Threading Namespace odpovídají balíčkům v Javě. Namespace System je obdobou java.lang. Tento namesapce obsahuje třídy a rozhraní pro podporu programování vícevláknových aplikací. Základní třída pro tvorbu vláken  System.Threading.Thread – třída představující vlákno Metoda Start – spustí vlákno Metoda Sleep – uspí na zadaný počet milisekund běžící vlákno (volat může pouze samo vlákno) Metoda Suspend – pozastavení vlákna (lze volat i z jiného vlákna) Metoda Resume – opětovné spuštění pozastaveného vlákna Metoda Join – vlákno může čekat na skončení jiného vlákna Metoda Abort – předčasné ukončení vlákna (výjimka ThreadAbortException, lze odvolat metodou ResetAbort) Vlastnost ThreadState – aktuální stav vlákna Vlastnost IsBackground (vrátí/nastaví typ vlákna) Vlastnost Priority (vrátí/nastaví prioritu vlákna)

Spuštění části kódu v samostatném vlákně V samostatném vlákně může běžet jakákoli metoda Vytvoří se instance třídy Thread, v konstruktoru se jí předá delegát, jehož parametrem je metoda, která má běžet v samostatném vlákně. Příklad vytvoření vlákna:  Metoda, která se má v novém vlákně spustit: public static void DoWork() { for (int i = 0; i < 100; i++) { Console.WriteLine("Child Thread: " + i); }  Vytvoření a spuštění vlákna: Thread childThread = new Thread(new ThreadStart(DoWork)); childThread.Start(); for (int i = 0; i < 100; i++) { Console.WriteLine("Main Thread: " + i); }

Synchronizace pomocí Monitoru System.Threading.Monitor – pomocí monitoru je možné vláknu udělit zámek pro přístup k objektu nebo jeho části (části kódu):  Podobné jako synchronized v Javě: lock (výraz){ // příkazy kritické sekce }  Nejčastěji používaným výrazem je: this - pokud chceme blokovat instanční proměnnou typeof(Třída) – pokud chceme blokovat statickou proměnnou  Pokud je kritickou sekcí celá metoda, pak se nepoužívá klíčové slovo lock, ale atribut: [MethodImpl (MethodImplOptions.Synchronized)] public void KritickaSekce() {//...}  Metoda Wait - uvolní zámek nad objektem, zablokuje se a umístí se do wait fronty monitoru  Metody Pulse a PulseAll – upozorní vlákno (vlákna) ve frontě, že došlo ke změně stavu

Další třídy pro synchronizaci System.Threading.WaitHandle  Metody WaitAny(), WaitAll(), WaitOne()  Abstraktní třída System.Threading.Mutex  Potomek třídy System.Threading.WaitHandle  Ke sdílenému zdroji může přistupovat pouze to vlákno, kterému se podaří získat (acquire) instanci této třídy System.Threading.Interlocked  Poskytuje metody na zvýšení a snížení hodnoty, cílem je, aby při změně integer hodnoty proběhlo její zvýšení nebo snížení jako jedna operace a jiné vlákno nemohlo v průběhu zvýšení nebo snížení přistoupit k proměnné. umožňuje tedy atomické operace s objekty  Metody Increment(ref int), Decrement(ref int)  Metoda CompareExchange(ref object, object, object)  Metoda Exchange(ref object, object) System.Threading.AutoResetEvent, ManualResetEvent  Potomek třídy EventWaitHandle (synchronizovaný Event)  Umožňuje komunikaci mezi vlákny. Jedno vlákno čeká, dokud jiné vlákno nezavolá na stejné instanci této třídy metodu Set(). System.Threading.Semaphore  Potomek třídy WaitHande  Pro řízení přístupu více vláken ke zdrojům

Příklad – producent, konzument class Program { static void Main(string[] args) { Zasobnik zasobnik = new Zasobnik(VELIKOST_ZASOBNIKU); for (int i = 0; i < POCET_VLAKEN; i++) { Thread producent = new Thread(new ThreadStart(new Producent("Producent " + (i + 1), zasobnik).DoWork)); Thread konzument = new Thread(new ThreadStart(new Konzument("Konzument " + (i + 1), zasobnik).DoWork)); producent.Start(); konzument.Start(); } class Zasobnik { public void VlozHodnotu(int hodnota) { lock (this) { while (plny) { Monitor.Wait(this); } hodnoty.Add(hodnota); if (hodnoty.Count >= KAPACITA) { plny = true; } Monitor.PulseAll(this); } [MethodImpl(MethodImplOptions.Synchronized)] public int OdeberHodnotu() { while (hodnoty.Count == 0) { Monitor.Wait(this); } int hodnota = hodnoty[hodnoty.Count - 1]; hodnoty.RemoveAt(hodnoty.Count - 1); plny = false; Monitor.PulseAll(this); return hodnota; }

Synchronizace kolekcí v C# ArrayList  ThreadSafe – pro některé případy – mnohonásobné čtení  Metoda Synchonized, vrátí ThreadSafe ArrayList SortedList  ThreadSafe – pro některé případy – mnohonásobné čtení  Metoda Synchonized, vrátí ThreadSafe SortedList HashTable  ThreadSafe – pro některé případy – mnohonásobné čtení a jedno přidávající vlákno  Metoda Synchonized, vrátí ThreadSafe HashTable Stack  Pro zajištění ThreadSafe užít metodu Synchronized Queue  Pro zajištění ThreadSafe užít metodu Synchronized

Porovnání jazyků Java a C# v oblasti vláken JavaC# ZámekKlíčové slovo synchonized Užití v deklaraci nebo na část kódu Klíčové slovo lock Užití na část kódu Spouštění v samostatném vlákně Třída – potomek Thread nebo implementuje Runnable. Samostatně se provede metoda run() Třída Thread, delegát odkazuje na metodu, která má být v samostatném vlákně vykonána. wait, notify, notifyAll, sleep, join sleep – metoda Thread join – metoda Thread wait – metoda Object notify, notifyAll – metody Object V Javě tedy každá třída dědí metody wait, notify a notifyAll od předka java.lang.Object, které se používají pro operace s vlákny. Sleep – metoda Thread Join – metoda Thread Wait – metoda Monitor Pulse, PulseAll – metody Monitor V C# jsou ekvivalentními metodami Wait, Pulse a PulseAll třídy System.Threading.Monitor KolekceOddělené synchronizované a nesynchronizované kolekce Vždy záleží a konkrétní kolekci, zajištění synchronizace pomocí metody Synchronized Přístup do systému v rámci vláken neano

Shrnutí Pro práci s vlákny namespace System.Threading Hlavní třída reprezentující vlákno je Thread Pro zamykání procesů slouží třída Monitor Atomické operace zajišťuje třída Interlocked Přístup ke zdrojům zajišťuje Semaphore Existují kolekce se synchronizovaným přístupem Možnost řízení i na úrovni procesů OS

Za současným rozvojem jazyka C# stojí především vzrůstající obliba využívání frameworku.NET pro tvorbu podnikových aplikací.