Reflexe (1) Reflexe (Reflection) představuje proces ve-doucí k získání informací o sestavách (assemblies) a datových typech, které jsou v nich definovány.

Slides:



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

Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Operační systémy. OPERAČNÍ SYSTÉMY pomoc operátorovi, podpora vlastností reálného času, víceuživatelských a více úlohových systémů.
C# pro začátečníky Mgr. Jaromír Osčádal
XII/2007 Gepro, spol. s r.o. Ing. Stanislav Tomeš Struktura výkresu - titulní strana Struktura výkresu WKOKEŠ.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
C# - znakové typy a řetězce
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
C# - Exceptions (výjimky)
PHP – Základy programování
Objektové programování
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
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 -
Relační databáze.
Datové typy a práce s nimi
Vypracoval: Ondřej Dvorský Třída: VIII.A
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.
Metainformační systém založený na XML Autor: Josef Mikloš Vedoucí práce: Ing. Jan Růžička, Ph.D. V/2004.
Databázové systémy Přednáška č. 4 Proces návrhu databáze.
JavaScript Podmínky, cykly a pole.
13AMP 2. přednáška Ing. Martin Molhanec, CSc.. Stav procesu (kontext) Stav procesu je úplná informace, kterou je nutné uschovat při přerušení procesu,
VISUAL BASIC PRALG.
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í.
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
Práce se šablonami v MS Word 2007
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
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.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
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.
Databázové modelování
Základy syntaxe jazyka PHP PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. Typický PHP skript obsahuje: Typický PHP skript.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Databázové systémy Informatika pro ekonomy, př. 18.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
WINDOWS Základní popis a údržba operačních systémů.
ZÁKLADNÍ ŠKOLA SLOVAN, KROMĚŘÍŽ, PŘÍSPĚVKOVÁ ORGANIZACE ZEYEROVA 3354, KROMĚŘÍŽ projekt v rámci vzdělávacího programu VZDĚLÁNÍ PRO KONKURENCESCHOPNOST.
Software,hardware,data,biti a bajty.  Software je v informatice sada všech počítačových programů používaných v počítači, které provádějí nějakou činnost.
Databáze MS ACCESS 2010.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Bezpečnostní technologie I
Vypracoval / Roman Málek
Moduly.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Vlastnosti souborů Jaroslava Černá.
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Příkazy (1) Příkazy (commands) slouží pro zjednodušení vyvolání jedné (stejné) funkce programu (pop-sané metodou) pomocí různých prostředků, např.: položka.
Návrhový vzor Flyweight
Operační systémy 9. Spolupráce mezi procesy
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Oblast platnosti identifikátoru (1)
C# přehled vlastností.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
ZAL – 7. cvičení 2016.
Transkript prezentace:

Reflexe (1) Reflexe (Reflection) představuje proces ve-doucí k získání informací o sestavách (assemblies) a datových typech, které jsou v nich definovány Umožňuje procházení a manipulaci s objek-tovým modelem reprezentujícím konkrétní aplikaci Každá aplikace pro .NET Framework je tvořena alespoň jednou sestavou (assembly) 22/11/2017

Reflexe (2) Sestava (assembly): tvoří základní (primární) stavební blok aplikace určené pro .NET Framework skládá se ze čtyřech prvků: manifest, který obsahuje metadata o sestavě metadata o typech uložených v assembly kód v jazyce CIL (MSIL) zdroje (resources) Metadata o obsažených typech a kód v jazyce CIL tvoří tzv. modul (module), který může obsahovat definice datových typů a jejich implementace 22/11/2017

Reflexe (3) Poznámka: Manifest obsahuje např.: sestava může obecně obsahovat více modulů jednotlivé moduly jsou reprezentovány soubory s příponou .netmodule Manifest obsahuje např.: jednoduchý název sestavy číslo verze sestavy seznam souborů, které tvoří danou sestavu seznam datových typů, které tvoří danou sestavu a informaci, ke kterému modulu v sestavě je kon-krétní typ připojen 22/11/2017

Reflexe (4) Každá aplikace pro .NET Framework běží v tzv. aplikační doméně (application domain): představuje izolované běhové prostředí obdoba procesu známého z Windows API není popsána metadaty je reprezentována třídou AppDomain (definová-na ve jmenném prostoru System) Třída AppDomain definuje mimo jiné: statickou vlastnost CurrentDomain: poskytuje přístup k aktuální aplikační doméně metodu GetAssemblies: vrací (v podobě pole) seznam zavedených sestav 22/11/2017

Reflexe (5) Pro využití možností reflexe jsou k dispozici následující třídy: Object Abstraktní třída Assembly AssemblyName MemberInfo FieldInfo Module PropertyInfo ParameterInfo MethodBase ConstructorInfo EventInfo MethodInfo Type 22/11/2017

Reflexe (6) Třída Assembly: Třída AssemblyName: zapouzdřuje sestavu, tj. samopopisující se blok aplikace CLR umožňuje: zavést sestavu zjistit metadata a součásti sestavy identifikovat datové typy, jež jsou v sestavě obsaženy vytvářet instance obsažených datových typů Třída AssemblyName: umožňuje zjistit informace o identitě sestavy např.: verze, informace o kultuře apod. 22/11/2017

Reflexe (7) Třída MemberInfo: představuje předka pro třídy, které poskytují informace o členech třídy, tj. o: datových položkách – FieldInfo vlastnostech – PropertyInfo událostech – EventInfo mezi potomky MemberInfo patří i třídy: MethodBase: předek pro třídy: ConstructorInfo: poskytuje informace o konstruktorech MethodInfo: poskytuje informace o metodách Type: reprezentuje deklarace datových typů (tříd, rozhraní, polí, hodnotových typů, výčtových typů, generik apod.) představuje metadata typů 22/11/2017

Reflexe (8) Třída Module: Třída ParameterInfo: Poznámka: provádí reflexi modulu zpřístupňuje modul v rámci sestavy Třída ParameterInfo: poskytuje informace o atributech parametrů např.: datové typy, implicitní hodnoty Poznámka: všechny výše uvedené třídy (vyjma třídy Type) jsou definovány ve jmenném prostoru System.Reflection 22/11/2017

Třída Type (1) Definována ve jmenném prostoru System Poskytuje členy pro zpřístupnění metadat daného datového typu Abstraktní třída  její instanci nelze vytvořit voláním konstruktoru Pro získání instance lze použít: volání metody GetType zděděné od třídy Object na konkrétní instanci třídy např.: Person p = new Person(); Type t = p.GetType(); 22/11/2017

Třída Type (2) volání statické metody GetType třídy Type např.: Person p = new Person(); Type t = Type.GetType (”Namespace.Person”); operátor typeof: např.: Person p = new Person(); Type t = typeof(Person); 22/11/2017

Třída Type (3) Mezi členy poskytované třídou Type patří např.: vlastnosti pro zjištění základních charakteristik (rysů) daného datového typu, např.: IsAbstract, IsArray, IsClass, IsEnum, IsGenericTypeDefinition, IsGenericParameter, IsInterface, IsPrimitive, IsSealed, IsValueType metody vracející pole obsahující požadované položky, např.: GetConstructors, GetEvents, GetFields, GetInterfaces, GetMembers, GetMethods, GetNestedTypes, GetProperties 22/11/2017

Dynamické vytvoření instance (1) Na základě informací získaných pomocí re-flexe je možné dynamicky vytvořit instanci třídy, která je definována v jiné sestavě Pro dynamické vytvoření instance lze využít statickou metodu CreateInstance třídy Activator Metoda CreateInstance: umožňuje zadat parametry předávané konstrukto-ru (v podobě pole s prvky typu object) vrací odkaz na nově vytvořený objekt (vrácená hodnota je typu object) 22/11/2017

Dynamické vytvoření instance (2) U dynamicky vytvořené instance lze např.: zpřístupnit vlastnosti, k čemuž je možné použít: metodu GetProperty třídy Type: vrací hodnotu typu PropertyInfo metodu GetValue, resp. SetValue třídy PropertyInfo: umožňuje přečíst, resp. zapsat hodnotu zadané vlastnosti vyvolat metodu pomocí: metody GetMethod třídy Type: vrací hodnotu typu MethodInfo metody Invoke třídy MethodInfo: provede vyvolání zadané metody parametry jsou předávány jako pole s prvky typu object vrácená hodnota je typu object 22/11/2017

Regulární výrazy Regulární výraz (regular expression, regex) je řetězec popisující množinu řetězců Představuje vzor (šablonu), který je porovná-ván se vstupním textem Nejčastěji používány při vyhledávání textu nebo manipulaci s textem Regulární výraz se skládá z: literálů textu, které se mají shodovat speciálních znaků (metaznaků), které nejsou sou-částí hledaného textu, ale slouží pro popis alter-nativ, množin, počtů výskytů přepínačů 22/11/2017

Syntaxe regulárních výrazů (1) Tečka, zpětné lomítko . odpovídá libovolnému znaku k.s – kus, kos, k2s atd. \ vrací metaznaku původní význam a\+b – a+b Kvantifikátory – předcházející znak se musí vyskytovat … ? minimálně 0x, maximálně 1x ku?s – ks, kus * minimálně 0x, maximálně bez omezení halo* – hal, halo, halooo + minimálně 1x, maximálně bez omezení halo+ – halo, halooo {n} právě n-krát 10{6} – 1000000 {m,n} minimálně m-krát, maximálně n-krát 10{2,3} – 100, 1000 {n,} minimálně n-krát 10{2,} – 100, 1000, 10000 22/11/2017

Syntaxe regulárních výrazů (2) Skupiny znaků – odpovídá [] jednomu znaku v závorkách [abc] – a, b, c [^] jednomu znaku, neuvedenému v závorkách [^abc] – libovolný znak kromě a, b, c [-] jednomu znaku z rozsahu znaků [a-z] – malá písmena abecedy \s bílému znaku (\n, \r, \t, mezera aj.) a\sb – a b, ale ne ab \S jinému než bílému znaku a\Sb – a+b, ale ne a b \d desítkové číslici a\db – a2b, ale ne axb \D libovolnému znaku kromě desít. číslice a\Db – axb, ale ne a2b \w alfanumerickému znaku a podtržítku \w – 1, a, A, _, ale ne $, + \W nealfanum. znaku nebo podtržítku \W – $, !, ?, %, ale ne 2, b 22/11/2017

Syntaxe regulárních výrazů (3) Hranice (ukotvení) – odpovídá pozici … ^ za začátku řetězce čí řádku ^Petr – najde Petr na začátku řetězce nebo řádku $ na konci řetězce či řádku Pavel$ – najde Pavel na konci řetězce nebo řádku \b na začátku či konci slova \bkos\b – nenajde kos ve slově kost či kokos \B kdekoliv kromě začátku a konce slova \Bkos – najde kos ve slově kokos, ale ne v kost 22/11/2017

Syntaxe regulárních výrazů (4) Alternativy, seskupování, zpětné odkazy (reference) | odděluje několik dílčích výrazů ahoj|nazdar – odpovídá právě jednomu z pozdravů odděluje několik dílčích subvýrazů a{b|c} – odpovídá právě ab a ac () subřetězec, na nějž lze aplikovat kvantifikátor ko(ko)?s – odpovídá právě kos a kokos subřetězec, na nějž se lze odkazovat (\d)\1, resp. (\d)$1 – odpovídá 11, 22, 33 22/11/2017

Příklady regulárních výrazů Regulární výraz Odpovídá a+ sekvence písmen a (1 a více znaků) a* sekvence písmen a (0 a více znaků) o?kov okov nebo kov tel(efon)? tel nebo telefon telef(on|ax)? telefon nebo telefax [0-9]|[1-9][0-9] čísla 0 – 99 \d{2} sekvence dvou číslic desítkové soustavy (00, 01 – 98, 99) (19|20)\d{2} letopočty 1900 – 2099 \d{2,6} sekvence dvou až šesti číslic [^ ,.]+ neprázdná sekvence znaků, mezi nimiž nesmí být mezera, čárka nebo tečka \d+0$ řetězec, který končí znakem 0, kterému předchází minimálně jedna číslice 22/11/2017

Třída Regex (1) Definována ve jmenném prostoru System.Text.RegularExpressions Reprezentuje neměnný (immutable) regulární výraz Lze ji využít např. k: rozboru textu (parsing) vyhledávání specifických vzorů textu editování, nahrazování nebo mazání textových podřetězců 22/11/2017

Třída Regex (2) Regulární výraz, s nímž chceme pracovat je specifikován v době volání konstruktoru Metody provádějící testování, zda text odpo-vídá regulárnímu výrazu jsou definovány jako instanční i jako statické Mezi nejčastěji používané metody patří: IsMatch: testuje, zda specifikovaný regulární výraz odpovídá zadanému řetězci vrací hodnotu typu bool 22/11/2017

Třída Regex (3) Match: Matches: hledá v zadaném řetězci první výskyt textu, který odpovídá specifikovanému regulárnímu výrazu vrací hodnotu typu Match, pomocí jejíž: vlastnosti Success lze ověřit, zda odpovídající text byl, resp. nebyl nalezen vlastnosti Value je možné získat nalezený text metody NextMatch lze hledat další výskyt textu (jež odpo-vídá specifikovanému regulárnímu výrazu) Matches: hledá v zadaném řetězci všechny výskyty textu, které odpovídají specifikovanému regulárnímu výrazu vrací hodnotu typu MatchCollection 22/11/2017

Třída Regex (4) Replace: Split: provede náhradu všech výskytů textu (specifikova-ných regulárním výrazem) zadaným řetězcem vrací hodnotu typu string Split: rozdělí vstupní řetězec na pozicích definovaných regulárním výrazem vrací pole řetězců 22/11/2017

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 procesu přiděluje tzv. časová kvanta Pokud jsou časová kvanta dostatečně malá (a počítač není přetížen velkým množstvím spuštěných programů), má uživatel pocit, že všechny programy pracují současně 22/11/2017

Multithreading (1) Schopnost programu (za příslušné podpory operačního systému) zavést „multitasking sám v sobě“ Program se může rozdělit na několik samo-statných výpočtových (prováděcích) vláken, tzv. threads Jednotlivým vláknům jsou pak opět přidělová-na časová kvanta a tím vzniká dojem, že tato vlákna pracují současně 22/11/2017

Multithreading (2) Dovoluje vyvolat funkci programu, ještě dří-ve než byla dokončena funkce předešlá Program (v operačním systému podporujícím multithreading) začíná pracovat hlavním (primárním) výpočtovým vláknem V rámci hlavního výpočtového vlákna mohou být vytvářena a spouštěna další výpočtová vlákna 22/11/2017

Třída Thread (1) Definována ve jmenném prostoru: System.Threading Umožňuje vytváření a řízení činnosti výpoč-tových vláken Vytvoření nového výpočtového vlákna lze provést prostřednictvím volání konstruktoru (třídy Thread) Volanému konstruktoru se jako parametr pře-dá delegát specifikující metodu, která obsa-huje příkazy, jež se budou v průběhu výpoč-tového vlákna provádět 22/11/2017

Třída Thread (2) Delegát specifikující vyvolávanou metodu je tvaru: public delegate void ThreadStart() public delegate void ParameterizedThreadStart(object obj) Zahájení činnosti výpočtového vlákna je mož-né následně provést pomocí volání metody Start: vlákno je spuštěno asynchronně, tj. jako nebloku-jící Vlastnosti: CurrentThread: vrací aktuálně běžící výpočtové vlákno 22/11/2017

Třída Thread (3) IsBackground: Name: Priority: udává, zda se jedná o výpočtové vlákno, které je na pozadí, tj. background výpočtové vlákno může být background (nezabraňuje ukončení procesu) nebo foreground v okamžiku, kdy jsou všechna výpočtová vlákna fore-ground (patřící k danému procesu) ukončena, dojde k ukončení celého procesu a všechna zbývající vlákna background zůstanou nedokončena Name: specifikuje jméno výpočtového vlákna Priority: udává prioritu vlákna (Lowest, BelowNormal, Normal, AboveNormal, Highest) 22/11/2017

Třída Thread (4) Metody: ThreadState: Abort: Join: specifikuje stav vlákna (např. Running, Stopped, Aborted, Background apod.) Metody: Abort: způsobí výjimku ThreadAbortException a za-hájí proces vedoucí k ukončení výpočtového vlákna výjimka ThreadAbortException může být za-chycena, ale na konci bloku catch je vyvolána znovu opětovnému vyvolání ThreadAbortException lze zabránit voláním metody ResetAbort Join: blokuje volající výpočtové vlákno, dokud dané výpoč-tové vlákno neskončí 22/11/2017

Třída Thread (5) ResetAbort: Sleep: Start: ruší požadavek na ukončení výpočtového vlákna Sleep: pozastaví provádění vlákna na specifikovaný počet milisekund Start: zahájí činnost dříve vytvořeného výpočtového vlákna dané vlákno se po vyvolání metody Start nachází ve stavu Running umožňuje předat objekt obsahující data, která mají být použita metodou spouštěnou v rámci výpočtového vlákna je-li vlákno dokončeno, nemůže být pomocí metody Start znovu restartováno 22/11/2017

Třída Thread (6) Poznámka: existují i metody Suspend a Resume pro do-časné pozastavení činnosti vlákna a pro opětovné pokračování v jeho činnosti tyto metody jsou však zastaralé (obsolete) a v bu-doucích verzích nebudou podporovány 22/11/2017

Příkaz lock (1) Označuje blok programu jako kritickou sekci Slouží k zabezpečení, že určitý blok programu proběhne bez přerušení jinými výpočtovými vlákny Příklad: private static object theLock = new object(); … public static void DoWork() { lock (theLock) { // kritická sekce } } 22/11/2017

Příkaz lock (2) Zaručuje, že výpočtové vlákno nevstoupí do kritické sekce v době, kdy se v ní nachází jiné výpočtové vlákno Objekt uvedený jako argument za klíčovým slovem lock: je použitý pro identifikaci zdrojů sdílených mezi více výpočtovými vlákny musí být viditelný všemi vlákny musí být referenčního datového typu by měl být chráněný proti vnějšímu přepsání (private) 22/11/2017

Příkaz lock (3) Příkaz lock představuje syntaktickou zkratku pro volání metod Enter a Exit statické třídy Monitor s použitím bloku try a finally Příklad: private static object theLock = new object(); … public static void DoWork() { Monitor.Enter(theLock); try { // kritická sekce } finally { Monitor.Exit(theLock); } } 22/11/2017

Třída ThreadPool (1) Definována ve jmenném prostoru System.Threading Statická třída, která poskytuje fond (sadu) vý-počtových vláken (řízených CLR), která je možné využít k provádění kódu (úloh) Vhodná zejména pro větší množství kratších úloh Všechna výpočtová vlákna prováděná v rám-ci třídy ThreadPool: se chovají jako vlákna background mají prioritu Normal 22/11/2017

Třída ThreadPool (2) Jestliže vlákno dokončí svou úlohu, je vráce-no do fondu vláken a může být opětovně po-užito: minimalizuje režii při vytváření nových vláken pro každou úlohu Jsou-li všechna vlákna zaměstnána, pak jsou další úlohy vkládány do fronty, dokud se ne-uvolní vlákna pro jejich zpracování Metody: GetMaxThreads: vrací maximální počet požadavků, které mohou být současně aktivní 22/11/2017

Třída ThreadPool (3) GetAvailableThreads: SetMaxThreads: vrací rozdíl mezi maximálním počtem vláken (hodno-tou vrácenou metodou GetMaxThreads) a počtem aktuálně aktivních vláken SetMaxThreads: nastavuje maximální počet požadavků, které mohou být současně aktivní QueueUserWorkItem: zařazuje metodu, která má být provedena vláknem, do fronty metoda začne být prováděna v okamžiku, kdy je ve fondu vláken dostupné (volné) vlákno signatura metody musí odpovídat delegátu: public delegate void WaitCallback(object state) 22/11/2017

Třída ThreadPool (4) RegisterWaitForSingleObject: registruje tzv. wait handle společně s metodou, která se zavolá v okamžiku, kdy dojde k signalizaci wait handlu signatura registrované metody musí odpovídat delagá-tu: public delegate void WaitOrTimerCallback(object state, bool timedOut) wait handle lze implementovat pomocí potomků třídy WaitHandle (vyjma třídy Mutex), např. pomocí třídy ManualResetEvent Pro zjištění, zda vlákno ukončilo svoji čin-nost, je zapotřebí odeslat signál (např. pomo-cí wait handle) 22/11/2017

Task Parallel Library Task Parallel Library (TPL) představuje mno-žinu tříd definovanou ve jmenném prostoru System.Threading.Tasks a částečně i ve jmenném prostoru System.Threading Umožňuje efektivní zpracování úloh s využi-tím všech dostupných jader procesoru Provádí např. řízení vláken ve fondu vláken (ThreadPool) a další nízkoúrovňové operace Podobně jako u třídy ThreadPool: mohou být vlákna opětovně použita vlákna pracují na pozadí 22/11/2017

Třída Parallel (1) Třída TPL definovaná ve jmenném prostoru System.Threading.Tasks Automaticky používá vlákna z fondu vláken a řídí konkurenční přístup Obsahuje (přetěžované) statické metody For a ForEach, které umožňují iterovat kolek-cemi implementujícími rozhraní IEnumerable<T> Tyto metody: umožňují zadat část kódu, která má být zpracová-na paralelně blokují provádění hlavního vlákna 22/11/2017

Třída Parallel (2) Přináší podporu datového paralelismu: stejné operace jsou prováděny současně nad prv-ky v kolekci (poli) vstupní kolekce (pole) je rozdělena tak, aby více vláken mohlo současně pracovat nad jejími růz-nými částmi Srovnání (foreach): sekvenční verze: foreach (var item in sCollection) { DoWork(item); } paralelní ekvivalent: Parallel.ForEach(sCollection, item => DoWork(item)); 22/11/2017

Třída Parallel (3) Příklad (možná použití metody For): static void TestMethod() { Parallel.For(0, 1000, DoWork); Parallel.For(0, 1000, delegate(int i) { // Provedení práce }); Parallel.For(0, 1000, i => { // Provedení práce }); } static void DoWork(int i) { // Provedení práce } 22/11/2017

Třída Task Definována ve jmenném prostoru System.Threading.Tasks Reprezentuje asynchronní operace Metoda, která má být provedena jako samo-statná úloha (task), může být specifikována (jako parametr) v době volání konstruktoru Její následné spuštění lze realizovat voláním metody Start Prováděná metoda neblokuje hlavní vlákno aplikace Na její dokončení počkat pomocí metody Wait 22/11/2017