Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok.

Hasonló előadás


Az előadások a következő témára: "V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok."— Előadás másolata:

1 V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok

2 V 1.0 OE-NIK HP 2 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok

3 V 1.0 A párhuzamos végrehajtás alapjai A Neumann-architektúrára épülő számítógépek a programokat sorosan hajtják végre Több program egyidejű végrehajtásához kell: –Több processzor, több mag –Hyperthreading / hasonló technológiák –Időosztás A végrehajtás alatt álló programok egymástól való elszigetelése is szükséges –Folyamatok (processzek): magas szintű elszigetelés Egy program egy futó példánya által használt erőforrások halmaza Külön memóriaterület Hiba esetén csak a hibázó folyamat sérül (se más processzek, se az OS) Nincs egyszerű processzközi kommunikáció –Szálak Folyamatokon belüli párhuzamosítás Részben megosztott memóriaterület 3 OE-NIK HP P 1 folyamat T 11 szál T 12 szál T 13 szál

4 V 1.0 Illusztráció: az időosztás elve P 1 folyamat Futó állapot Futó állapot Futásra kész vagy várakozó állapot Állapotmentés (PCB 2 ) Állapotbetöltés (PCB 1 ) Állapotmentés (PCB 1 ) Állapotbetöltés (PCB 2 ) Megszakítás vagy rendszerhívás Futó állapot Futásra kész vagy várakozó állapot Futásra kész vagy várakozó állapot P 2 folyamat Megszakítás vagy rendszerhívás Original image © 2000-2005 David A. Solomon and Mark Russinovich 4 OE-NIK HP Megj: az ábra általános (DOS/Unix/Windows) és egyszerűsített, mai Windows-ok esetén a párhuzamosítás alapegysége a szál

5 V 1.0.NET folyamatok, szálak, AppDomain A.NET keretrendszerben a folyamatok megfelelnek az operációs rendszer folyamatainak –System.Diagnostics.Process, System.Diagnostics.ProcessStartInfo A.NET szálak (jelenleg) megfelelnek az operációs rendszer szálainak –De elméletileg egy valódi szálon a keretrendszer több szála is futhat(na) A.NET a folyamatokon belül egy további szintet, az ún. alkalmazástartományt („application domain”) is meghatároz –A felügyelt kódú programokat a keretrendszer futtatás közben is ellenőrzi, ezért ezek nem képesek egymást negatívan befolyásolni –Így viszont nem feltétlenül szükséges külön folyamatként futtatni őket –Sebesség és memóriaigény szempontjából nagy előny (folyamatok létrehozása, nyilvántartása és a közöttük történő váltás sok időt és memóriát igényel) Az alkalmazástartományokkal és programozásukkal a jelen tárgy keretében nem foglalkozunk részletesen. 5 OE-NIK HP

6 V 1.0 OE-NIK HP 6 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok

7 V 1.0 Folyamatok kezelése (kivonatos referencia) System.Diagnostics.Process osztály Metódusok Start()Folyamat indítása CloseMainWindow()Folyamat főablakának bezárása (GUI alkalmazásoknál) Kill()Folyamat leállítása GetCurrentProcess()Aktuális folyamatot reprezentáló objektum lekérése GetProcesses()Összes folyamat adatainak lekérése a helyi számítógépről WaitForExit()Várakozás az adott folyamat befejeződésére Tulajdonságok StartInfoA folyamathoz tartozó ProcessStartInfo példány PriorityClassA folyamat prioritása (fontossági szintje) EnableRaisingEventsA folyamat kiválthat-e eseményeket HasExitedA folyamat kilépett-e ExitCode, ExitTimeKilépési kód, illetve a kilépés (vagy leállítás) időpontja StandardInput, StandardOutput Alapértelmezett be- és kimeneti csatorna (adatfolyam) Események ExitedA folyamat kilépett (vagy leállították) 7 OE-NIK HP

8 V 1.0 Folyamatok kezelése (kivonatos referencia) System.Diagnostics.ProcessStartInfo osztály Tulajdonságok FileName Fájlnév megadása az indítandó folyamathoz (program vagy programmal társított fájltípusba tartozó fájl neve) Arguments, WorkingDirectory Parancssori paraméterek és munkakönyvtár megadása az indítandó folyamathoz Domain, UserName, Password Folyamat indítása adott felhasználó nevében RedirectStandardInput, RedirectStandardOutput Alapértelmezett be- és kimeneti csatorna átirányítása ErrorDialogHibaüzenet jelenjen-e meg, ha a folyamat indítása sikertelen UseShellExecute Operációs rendszerhéj programindító funkciójának használata folyamat indításához VerbA társított fájl megnyitásakor végrehajtandó művelet WindowStyle Kezdeti ablakméret megadása (normál, minimalizált vagy maximalizált méret) 8 OE-NIK HP

9 V 1.0 Példa új folyamat indítására using System; using System.Diagnostics; class Program { static void Main() { Process newProcess = new Process(); newProcess.StartInfo = new ProcessStartInfo("hello.exe", "Pistike"); newProcess.StartInfo.ErrorDialog = true; newProcess.StartInfo.UseShellExecute = false; newProcess.StartInfo.RedirectStandardOutput = true; newProcess.Start(); newProcess.WaitForExit(); Console.WriteLine("Az elindított folyamat üzenetei:"); Console.Write(newProcess.StandardOutput.ReadToEnd()); Console.ReadLine(); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 9 OE-NIK HP

10 V 1.0 Feladat Hozzon létre konzolos alkalmazást, amelynek segítségével előre beállítható darabszámú traceroute (tracert) folyamatot tudunk párhuzamosan futtatni, így az egyes hívások nem blokkolják a fő alkalmazást. 10 OE-NIK HP

11 V 1.0 OE-NIK HP 11 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok

12 V 1.0 Egy szál / több szál? A többszálúság biztosítja a program/OS válaszkészségét, de... A szál DRÁGA (megj: OS-függő, Windowsra vonatkozik) Memóriafoglalás szálanként: –Stack, szálkontextus (stb.) Szálak használatából adódó processzoridő-veszteség: –Időosztás menedzselésével elvesztett idő Ideális: annyi szál/program, ahány mag –Szálváltáskor a futási környezet változásából adódó cache miss-ek Újabb szálváltáskor újabb cache miss-ek... –Szál létrehozásakor és megszüntetésekor a programban betöltött natív.dll-ekben Dll_Main(DLL_THREAD_ATTACH), Dll_Main(DLL_THREAD_DETACH) hívások történnek Megj: powerpnt.exe 147 dll!!!!... VS 2012: 183 dll... Szál overhead < process overhead OE-NIK HP 12

13 V 1.0 A többszálúság megvalósítási lehetőségei Aszinkron metódushívás (nem tananyag) –Delegáltak és az aszinkron mintát támogató metódusok aszinkron hívása Thread osztály –Szálak alacsony szintű kezelését teszi lehetővé –Egyszerű, de sok munkát és pontosságot igényel ThreadPool osztály (nem tananyag) –Állandóan rendelkezésre álló „szálkészlet” használata –Nem kell a szálakat egyenként létrehozni, megszüntetni –Kezelése egyszerű és hatékony, de a szálak egyéni identitását nem biztosítja BackgroundWorker osztály (nem tananyag) –A felhasználói felületi funkciók és a háttérben elvégzendő sokáig tartó műveletek végrehajtásának szétválasztására szolgál –Korlátozott funkcionalitása miatt kevés célra alkalmas TPL / Task osztály –Magas szintű szálkezelésre való egységes, rengeteg funkcionalitással bíró API TPL / Parallel osztály –Adatpárhuzamos végrehajtásra nyújt beépített megoldásokat 13 OE-NIK HP

14 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). 14 OE-NIK HP

15 V 1.0 System.Threading.Thread példa using System; using System.Threading; class Program { static void Main(string[] args) { Console.WriteLine("Szál közvetlen létrehozása"); Console.WriteLine("Főszál ({0})", Thread.CurrentThread.GetHashCode()); Thread newThread = new Thread(ThreadMethod); newThread.Name = "Új szál"; newThread.Start(); newThread.Join(); } static void ThreadMethod() { Console.WriteLine("{0} (sorszáma: {1})", Thread.CurrentThread.Name, Thread.CurrentThread.GetHashCode()); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 15 OE-NIK HP

16 V 1.0 Feladat Hozzon létre konzolos alkalmazást, amelynek segítségével előre beállítható darabszámú weboldal teljesítményét tudjuk 10-10 másodpercen át tesztelni külön szálakon futó System.Net.WebClient().DownloadString(url) metódushívások segítségével 16 OE-NIK HP

17 V 1.0 OE-NIK HP 17 Források Miklós Árpád prezentációja Jeffrey Richter: CLR via C#, 4th edition (2012, Microsoft Press)


Letölteni ppt "V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok."

Hasonló előadás


Google Hirdetések