V 1.0 OE-NIK HP 1 Haladó Programozás BackgroundWorker Szálkezelés + szinkronizáció.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Készítette: Kun Béla.  Operációs rendszernek nevezzük a számítástechnikában a számítógépeknek azt az alapprogramját, mely közvetlenül kezeli a hardvert,
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
3. A programozás eszközei, programozás-technikai alapismeretek
Informatika érettségi tapasztalatai és változásai
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Fajfrik Dóra tanárjelölt munkája alapján
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.
Dinamikus tömbök.
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Az operációs rendszerek
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
C# tagfüggvények.
C# tagfüggvények.
Közös kinézet Mester oldal, témák, skin-ek, css Webalkalkalmazás fejlesztése ASP.NET-ben Krizsán Zoltán.
Krizsán Zoltán.  Ha az algoritmus sokáig dolgozik,  de el akarjuk kerülni a „fagyást”.  Kisebb a költsége, mint az új folyamatnak.  Programozás szempontjából.
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Készítette : Szente Szilvia Spek Krisztina Felkészítő tanár : Spek Krisztina Iskola : Magyar Tannyelvű Magán Szakközépiskola, Gúta.
1 Operációs rendszerek Az NT folyamatok kezelése.
1 Operációs rendszerek Az ütemezés megvalósítása.
V 1.0 OE-NIK HP 1 Haladó Programozás Folyamatok Szálkezelés: Parallel.For.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
Az operációs rendszereK
ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető.
Operációs rendszer.
Kölcsönös kizárás (bináris és nembináris szemaforok)
Hálózat kiépítésével lehetőségünk nyílik más számítógépek erőforrásainak használatára. Osztott háttértár használat: egy számítógép merevlemezének megosztásával.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Az operációs rendszerek feladata, fajtái, felépítése
Tanulási útmutató Tanulási Útmutató Az Észak-magyarországi Regionális Távoktatási Központ által a TÁVHÁLÓ projektben kifejlesztett e-learning környezethez.
Visual Basic 2008 Express Edition
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
Csempe Programozás érettségi mintafeladat
A gyakorlatok munkakörnyezete
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Supervizor By Potter’s team SWENG 1Szarka Gábor & Tóth Gergely Béla.
CUDA C/C++ programozás Egyéb eszköztárak vegyesen A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt.
Párhuzamosság, kritikus szakasz, szemaforok Operációs rendszerek.
Óravázlat Készítette: Kucsera Mihály és Toldi Miklós
V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok.
Haladó Programozás System.Threading.Tasks.Task OE-NIK HP.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
V 1.0 OE-NIK HP 1 Haladó Programozás Folyamatok Szálkezelés alapok.
A Windows Server 2003 termékcsalád A Windows Server 2003 termékcsaládnak 4 tagja van: Windows Server 2003, Standard Edition Windows Server 2003, Enterprise.
DLL használata és készítése Feladat
V 1.0 OE-NIK HP 1 Haladó Programozás Szálkezelés + szinkronizáció.
Félcsoport (semigroup) = ({s},{ *: s s  s [infix]}. semigroup is a type specification = sorts: s oprs: *: s s  s [infix] eqns: m 1, m 2, m 3  s (m 1.
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Párhuzamos programozás
Neumann János Informatikai Kar
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Az operációs rendszerek
Thread és Task.
Folyamatok.
Szálszinkronizáció.
Szálszinkronizáció.
Előadás másolata:

V 1.0 OE-NIK HP 1 Haladó Programozás BackgroundWorker Szálkezelés + szinkronizáció

V 1.0 Folyamatok és szálak A szálak elsődleges célja a folyamatokon belüli párhuzamosítás A folyamatok adminisztrációja és váltása igen erőforrásigényes művelet, viszont az általuk nyújtott elszigetelés szintje egy programon belül csaknem mindig szükségtelen. Ezt az ellentmondást oldják fel a szálak, amelyek elszigetelést nem nyújtanak, gyors párhuzamos végrehajtást azonban igen. A.NET keretrendszer támogatja a szálak kezelését is A keretrendszer kihasználja az operációs rendszer száltámogatását, de a.NET szálak és az operációs rendszer szálai között nem feltétlenül létezik 1:1 megfeleltetés (egy valódi szálon a keretrendszer több szála is futhat). P 1 folyamat P 2 folyamat P 3 folyamat T 11 szál T 12 szál T 13 szál T 21 szál T 22 szál T 23 szál T 24 szál T 31 szál 2 OE-NIK HP

V 1.0 A többszálúság megvalósítási lehetőségei System.Threading.Thread osztály Lehetővé teszi szálak egyenkénti létrehozását, azonosítását, állapotvezérlését és megszüntetését. Kezelése egyszerű, viszont sok programozói munkát és pontosságot igényel. System.Threading.ThreadPool osztály Gyakran ismétlődő, rövid ideig tartó, erősen párhuzamos műveletekhez rendelkezésre álló „szálkészlet”, melynek használatával megtakarítható a szálak egyenkénti létrehozásának és megszüntetésének időigényes munkája. Kezelése egyszerű és hatékony, de a szálak egyéni identitását nem biztosítja. System.ComponentModel.BackgroundWorker osztály A felhasználói felület kezelésének és a háttérben elvégzendő, esetenként igen sokáig tartó műveletek végrehajtásának szétválasztására szolgál. Kezelése igen kényelmes (az állapotváltozásokról események útján értesíti a felhasználó osztályt), ám korlátozott funkcionalitása miatt kevés célra alkalmas. Aszinkron metódushívás Képviselők és az aszinkron mintát támogató metódusok aszinkron hívása 3 OE-NIK HP

V 1.0 OE-NIK HP 4 Haladó Programozás BackgroundWorker Szálkezelés + szinkronizáció

V 1.0 Szálak kezelése (rövid referencia) System.ComponentModel.BackgroundWorker osztály Metódusok RunWorkerAsync()Háttérszál indítása CancelAsync()Háttérszál leállítása ReportProgressHáttérszál folyamatjelzése Tulajdonságok IsBusyA háttérszál aktív-e (éppen fut-e) CancellationPendingLeállítás folyamatban (leállási kérelem érkezett) WorkerSupportsCancellationA háttérszál kérés esetén képes idő előtti leállásra WorkerReportsProgressA háttérszál képes folyamatjelzésre Események DoWorkKezelője a háttérben futtatandó metódus* ProgressChangedA háttérszál folyamatjelzését fogadó esemény RunWorkerCompletedA háttérszál futása befejeződött * Ez a metódus (a Windows UI megvalósítási modellje következtében) közvetlenül nem érintkezhet a felhasználói felület elemeivel. Ezek szükséges frissítését és állapotmódosításait a ProgressChanged és a RunWorkerCompleted eseménykezelőkben lehet elvégezni. 5 OE-NIK HP

V 1.0 Feladat Készítsünk Windows alkalmazást, amely időigényes műveletet futtat a háttérben, a felhasználói felülettől független szálon! A program legyen képes a művelet indítására és menet közbeni biztonságos megszakítására, a háttérben futó művelet állapotát pedig folyamatjelzővel jelezze! Ötletek: –Célszerű a BackgroundWorker osztály segítségével megoldani a feladatot –A háttérben futó szál a ReportProgress() metódussal jelezheti az előrehaladást (ezt az adatot a ProgressChanged esemény második paraméterében kapja meg a megfelelő eseménykezelő metódus) –A művelet megszakítását csak akkor kíséreljük meg, ha valóban fut (ez az IsBusy tulajdonság vizsgálatával állapítható meg) –A háttérben futó művelet végén a RunWorkerCompleted esemény kezelője a második paraméterben kap információt a műveletről (véget ért-e vagy megszakítás miatt fejeződött be, mi a végeredmény, történt-e hiba stb.) 6 OE-NIK HP

V 1.0 Megoldás Background Worker 7 OE-NIK HP

V 1.0 OE-NIK HP 8 Haladó Programozás BackgroundWorker Szálkezelés + szinkronizáció

V 1.0 Szálak kezelése (kivonatos referencia) System.Threading.Thread osztály Metódusok Start()Szál indítása Suspend(), Resume()Szál felfüggesztése, illetve folytatása Abort()Szál leállítása GetHashCode()Szál azonosítójának lekérése Sleep()Várakozás a megadott időintervallum elteltéig Join()Várakozás az adott szál befejeződésére Tulajdonságok CurrentCulture, CurrentUICulture A szálhoz tartozó aktuális kultúra, illetve a szálhoz tartozó felhasználói felület kiválasztott nyelve IsBackgroundAz adott szál háttérszál vagy előtérszál* IsThreadPoolThreadAz adott szál a ThreadPool egyik szála-e ManagedThreadIDA szál egyedi azonosítója NameA szál megnevezése PriorityA szál prioritása (fontossági szintje) ThreadStateA szál aktuális állapota(i) * A programok futása véget ér, ha az utolsó előtérszál is lefutott (az esetleg még futó háttérszálak ekkor automatikusan megszűnnek). 9 OE-NIK HP

V 1.0 Szinkronizáció A szinkronizáció olyan, párhuzamos szálak (vagy folyamatok) együttműködését megvalósító mechanizmus, amely minden körülmények között biztosítja a szálak (vagy folyamatok) által végzett műveletek szemantikai helyességét A párhuzamosan futó szálak kommunikációjához szinte biztosan szükség van közös erőforrások (memória, portok, I/O eszközök, fájlok) használatára. Ha ezek állapotát egy szál módosítja, de közben más szálak is hozzájuk férnek, akkor az utóbbi szálak könnyen hibás vagy félkész adatokhoz juthatnak. Az alapprobléma: bármely két utasítás végrehajtása között előfordulhat, hogy más szálak kapnak lehetőséget az előző szál által is kezelt közös adatok olvasására vagy módosítására Egyprocesszoros rendszereknél az operációs rendszer ütemezője (a szálak közötti váltás) ad erre lehetőséget, többprocesszoros rendszereknél pedig a valódi (fizikai) párhuzamosság miatt még gyakrabban merül fel a probléma. Ennek elkerülését szolgálják elsősorban a különböző szinkronizációs megoldások (másik, ezzel összefüggő céljuk az időzítések összehangolása). 10 OE-NIK HP

V 1.0 Szinkronizáció kölcsönös kizárással Kritikus szakasz („critical section”) A programokon belül megjelölt kritikus kódrészletek soros végrehajtását biztosítja több párhuzamos szál esetén is..NET osztályok: System.Threading.Monitor (és a C# „lock” utasítása), System.Threading.Mutex, System.Threading.ReaderWriterLock Szemafor („semaphore”) A kritikus szakasz általánosítása (többpéldányos erőforrások esetén egyszerre több szál belépését is lehetővé teszi)..NET osztály: System.Threading.Semaphore (.NET 2.0) Atomi végrehajtás („interlocked execution”) Egyes egyszerű műveletek oszthatatlan végrehajtását biztosítja (igen gyors)..NET osztály: System.Threading.Interlocked Csővezeték („pipe”) Olvasható és írható FIFO puffer, amely szükség szerint várakoztatja az igénylőket (az ún. „termelő-fogyasztó” probléma megoldására készült). 11 OE-NIK HP

V 1.0 Szinkronizáció bevárással (randevú) Esemény („event”) Két kódrészlet soros végrehajtását biztosítja úgy, hogy a „B” kódrészletet végrehajtó szál megvárja, amíg az „A” kódrészletet végrehajtó szál végez feladatával, illetve lehetőséget ad alkalmankénti vagy rendszeres jelzésre is..NET osztályok: System.Threading.Thread, System.Threading.AutoResetEvent, System.Threading.ManualResetEvent Időzítő („timer”) Relatív vagy abszolút időhöz való igazodást tesz lehetővé..NET osztályok: System.Windows.Forms.Timer, System.Timers.Timer, System.Threading.Timer Időzítők jellemzőiWindows.Forms.TimerTimers.TimerThreading.Timer Pontosság~10 ms~100 ns (!)~1 ms Futtatás saját szálon–++ Csak egyszeri aktiválás–++ Beállítható első aktiválás––+ Vizuális komponens+–– Platformfüggetlen––+ 12 OE-NIK HP

V 1.0 Példa szinkronizációra (a „lock” utasítás) using System; using System.Threading; class Program { private static int counter = 0; private static object lockObject = new Object(); static void Main(string[] args) { Thread t1 = new Thread(ThreadMethod); t1.Start(); Thread t2 = new Thread(ThreadMethod); t2.Start(); } private static void ThreadMethod() { lock (lockObject) { counter++; Thread.Sleep(500); Console.WriteLine("A számláló állása: " + counter); } A lock utasítás nélkül a metódus sorosan (egy szálon futtatva) helyesen működik, párhuzamosan (több szálon) azonban nem Figyelem: SOHA ne írjunk le az alábbiakra hasonlító kódot: lock (this) vagy lock (typeof(Program)) OE-NIK HP

V 1.0 A szinkronizáció két alapvető nehézsége Versenyhelyzet („race condition”) Párhuzamos futtatás esetén a közösen használt erőforrásokhoz történő hozzáférés szabályozatlansága veszélyezteti a program helyes működését. Az előző példa a lock utasítás nélkül jól illusztrálja a versenyhelyzet fogalmát. Holtpont („deadlock”) Akkor léphet fel holtpont, ha több szál több erőforráshoz kíván hozzáférni, miközben egyes erőforrásokat lefoglalva tartanak (tehát már beléptek egy erőforráshoz tartozó kritikus szakaszba, ott viszont várakozniuk kell, hogy hozzájuthassanak egy másik szükséges erőforráshoz). Példa: lock (a) { // feldolgozás lock (b) { // feldolgozás } 1. szál lock (b) { // feldolgozás lock (a) { // feldolgozás } 2. szál OE-NIK HP

V 1.0 Feladat Készítsünk többszálú konzolos alkalmazást, amely során két szál használja ugyanazt az erőforrást, amit esetünkben egy számokat tároló sor jelképez. Az egyik szál feladata a sor feltöltése, a másik feladata a sorból egy elem feldolgozása (kivétele). A fejlesztés közben gondoskodjon a szálak szinkronizációjáról is! Ötletek: –Először egy egyszerű megvalósítással döntsük el, szükség van-e szinkronizációra, majd ha úgy ítéljük meg, hogy igen, akkor használjuk a lock utasítást vagy a Monitor osztály statikus Enter(), illetve és Exit() metódusát –Szinkronizáció esetén a jobb teljesítmény érdekében igyekezzünk a lehető legrövidebbre venni a kritikus szakaszt 15 OE-NIK HP

V 1.0 Megoldás OE-NIK HP 16

V 1.0 Irodalomjegyzék (alapismeretek) C. Nagel, B. Evjen, J. Glynn, M. Skinner, K. Watson, A. Jones: Professional C# 2005 Kiadó: Wiley Publishing, Inc., 2006 ISBN: Web: Nyelv: angol Terjedelem: 1540 oldal Folyamatok kezelése: 14–16., 413. o. Szálkezelés: 349–368. o. Microsoft Corp., Visual Studio Developer Center Szálkezelés a.NET keretrendszerben: 17 OE-NIK HP

V 1.0 Irodalomjegyzék (magasszintű ismeretek) Albert I., Balássy Gy., Charaf H., Erdélyi T., Horváth Á., Levendovszky T., Péteri Sz., Rajacsics T.: A.NET Framework és programozása Kiadó: Szak Kiadó, 2004 ISBN: Web: Nyelv: magyar Terjedelem: 868 oldal Párhuzamos programozás: 585–607. o. Folyamatok kezelése: 608–613. o. Szálkezelés és szinkronizáció: 614–648. o. J. Richter: CLR via C#, Second Edition Kiadó: Microsoft Press, 2006 ISBN: Web: Nyelv: angol Terjedelem: 736 oldal Szálkezelés és szinkronizáció: 585–648. o. 18 OE-NIK HP

V 1.0 OE-NIK HP 19 Források Miklós Árpád prezentációja

V 1.0 OE-NIK HP 20

21 OE-NIK HP