Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaDezső Hajdu Megváltozta több, mint 9 éve
1
V 1.0 OE-NIK HP 1 Haladó Programozás Folyamatok Szálkezelés alapok
2
V 1.0 OE-NIK HP 2 Haladó Programozás 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
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
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 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) 6 OE-NIK HP
7
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) 7 OE-NIK HP
8
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 8 OE-NIK HP
9
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. 9 OE-NIK HP
10
V 1.0 OE-NIK HP 10 Haladó Programozás Folyamatok Szálkezelés alapok
11
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 11 OE-NIK HP
12
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). 12 OE-NIK HP
13
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 13 OE-NIK HP
14
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 14 OE-NIK HP
15
V 1.0 OE-NIK HP 15 Források Miklós Árpád prezentációja Jeffrey Richter: CLR via C#, 4th edition (2012, Microsoft Press)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.