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

Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán Eszterházy Károly Főiskola Információtechnológiai tsz. 2005.

Hasonló előadás


Az előadások a következő témára: "Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán Eszterházy Károly Főiskola Információtechnológiai tsz. 2005."— Előadás másolata:

1 Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán Eszterházy Károly Főiskola Információtechnológiai tsz. 2005

2 Szekvenciális programozás 2 2 Programozás ≈ Algoritmus implementálása Algoritmus jellemzője: egyértelmű! Így a kapott program egy egyszálú, ún. szekvenciális program.

3 Szekvenciális programozás 3 Szekvenciális programozás előnyei: -Nagyon sok algoritmus létezik ezen stílusra -Ezen algoritmusok „egyszerűek” -Könnyű őket implementálni -A kész programot egyszerű elindítani -A futó programot könnyű debug-olni -A futó programot könnyű leállítani -A program elvileg mindig ugyanúgy működik -A programra „egyszerű” helyességet bizonyítani

4 Szekvenciális programozás 4 Szekvenciális programozás hátrányai: Hatékonysági kérdések merülnek fel: - Az adott gépen kell minden erőforrásnak lennie - Memória - Processzor - Háttértár ( ezek nem minden határon túl fejleszthetőek ) - Nem tudja kihasználni a többprocesszoros rendszerek előnyeit sem

5 Többszálú programozás 5 Többszálú programozás: Továbbra is egyetlen gépen belül vagyunk Kiegészül 2 utasítással (1) új szál indítása ( START ) (2) szál befejezésének megvárása ( JOIN ) MEGOSZTOTT VÁLTOZÓK

6 Többszálú programozás 6 Többszálú programozás: A két szál ugyanazon számítógép által van futtatva: - A szálak elérik ugyanazon memóriaterületeket - Ez jó: a plusz szál a a számítás eredményét el tudja helyezni egy megadott memóriaterületen, ahol a fő szál majd meg tudja találni - Ez rossz: közös változókat használnak, amelyek használatát szinkronizálni kell

7 Többszálú programozás 7 Közös memóriaterületek hozzáférésének szinkronizálása x := x + 1 a := sin(x) / cos(x)... lock(x) { x = x+1; }... lock(x) { x = x+1; }... lock(x) { a = sin(x) / cos(x); }... lock(x) { a = sin(x) / cos(x); }...

8 Elosztott programozás 8 Ha … -A számítási folyamat programjai különböző hardware elemeken futnak -Nincs közös memória -> nem kell lock-olni -Így mentesülünk a lehetséges programozási hibáktól -A teljesítményt könnyű fokozni újabb gépek beállításával -Ezek egyszerű, olcsó, 1 processzoros gépek

9 Elosztott programozás 9 -A különböző hardware elemeken futó programok egymással hálózaton keresztül tartják a kapcsolatot - adatokat cserélnek - a feladatokhoz szükséges információkat küldik át - részeredményeket küldenek át - „hol tartasz” jellegű információkat küldenek át - a végén általában egyik gép begyűjti a részered- ményeket, összesíti, és befejezi a számítást

10 Elosztott programozás Szerver A szolgáltatást nyújtja A szolgáltatást igénybe veszi adatok 10 Kliens

11 Elosztott programozás 11 Szinkron kommunikáció: a hívó oldal megvárja a kommunikációs üzenet (adat) nyugtázását (ez gyakran a számítás eredményét jelenti) Aszinkron kommunikáció: a hívó oldal nem vár, fut tovább (ameddig csak lehet), majd általában egy ponton bevárja a választ. Busy waiting: a várakozás közben egy ciklusban folyamatosan ellenőrzi, hogy a válasz megérkezett-e már (terheli a helyi processzort)

12 Elosztott programozás Speed-up = Overhead: nem az algoritmusból eredő plusz idők szekvenciális futási idő elosztott futási idő 12

13 Elosztott programozás 13 Adatcsere módszerei: Message Passing: üzenetküldő rendszer, csomagok összeállítása, és elküldése. A fogadó oldalon egy puffer fogadja és tárolja az üzeneteket, és a kliens program ebből „ válogathat ”. Általában nem típus-biztos, a csomag belseje tetszőleges mennyiségű és típusú adatot tartalmazhat, melyet a kliens programnak meg kell értenie. Jellemzően aszinkron: a küldő elküldi az üzenetet, és „elfeledkezik” róla.

14 Elosztott programozás 14 Adatcsere módszerei: Remote Procedure Call:a kliens program ismeri a másik oldalon egy függvény nevét és paraméterezését, és egyszerűen meghívja azt átadván az aktuális paramétereket. A függvény visszatérési értéke pedig a válasz. Általában típus-biztos, a fordítóprogram a távoli eljáráshívás paraméterezését a szokásos módon ellenőrzi. Lehet szinkron: a küldő oldal „megvárja” a függvény lefutását a túloldalon. Lehet aszinkron: a küldő oldal fut tovább, majd egy ponton „bevárja” a visszatérési értéket.

15 fv. megvalósítása: Elosztott programozás 15 Szerver bool Primszam_e(int x) {.. számítás } bool Primszam_e(int x) {.. számítás } Kliens fv. meghívása: bool b = Primszam_e(10); bool Primszam_e(int x) { hálózaton ‘x’ átküldése várakozás eredmény visszaadása } bool Primszam_e(int x) { hálózaton ‘x’ átküldése várakozás eredmény visszaadása } interface lekérdezés, egyeztetés

16 Generált kód: Elosztott programozás – WEB service Web Service: 16 WEB Szerver [WebMethod] bool Primszam_e(int x) {.. számítás } [WebMethod] bool Primszam_e(int x) {.. számítás } Kliens Tetszőleges U.I. : bool b = Primszam_e(10); bool Primszam_e(int x) { hálózaton ‘x’ átküldése várakozás eredmény visszaadása } bool Primszam_e(int x) { hálózaton ‘x’ átküldése várakozás eredmény visszaadása } HTTP, SOAP, XML Interoperábilis, típus-biztos, de lassú

17 Proxy kód: Elosztott programozás – Remoting Remote Service: 17 Szerver bool Primszam_e(int x) {.. számítás... } void Main() { port nyitása fv regisztrálása várakozás … } bool Primszam_e(int x) {.. számítás... } void Main() { port nyitása fv regisztrálása várakozás … } Kliens Tetszőleges U.I. : bool b = Primszam_e(10); értesíteni a futtatót hogy a Primszam_e() fv melyik szerveren fut értesíteni a futtatót hogy a Primszam_e() fv melyik szerveren fut DLL A két alkalmazás között azonos DLL kell! TCP/IP DLL

18 home of ICE

19 Proxy kód: Elosztott programozás – I.C.E. 19 Szerver bool Primszam_e(int x) {... } Kliens generálva van a SLICE leírásból generálva van a SLICE leírásból I.C.E. kommunikációs DLL A szerver interface-t egy nyelvfüggetlen leírással kell rögzíteni: SLICE A szerver interface-t egy nyelvfüggetlen leírással kell rögzíteni: SLICE TCP/IP bool b = Primszam_e(10); I.C.E. kommunikációs DLL Skeleton kód: generálva van a SLICE leírásból generálva van a SLICE leírásból

20 Printer.ICE module Demo { interface Printer { void printString(string s); }; module Demo { interface Printer { void printString(string s); }; C# JAVA C++ Python V.B. SLICE file 20 PHP Win 98 SEWin 2000Win XP Linux on x86 Solaris 9 on SPARC HP-UX on PA-RISC AIX 5.2 on Power Win ME MacOS X 10.3.x Ice-E for Mobile and Embedded Devices

21 Type Range of Mapped Type Size of Mapped Type bool false or true ≥ 1bit byte −128 − 127 ≥ 8 bits 0−255 short −215 to 215−1 ≥ 16 bits int −231 to 231−1 ≥ 32 bits long −263 to 263−1 ≥ 64 bits float IEEE single-precision ≥ 32 bits double IEEE double-precision ≥ 64 bits string All Unicode characters, Variable-length excluding the character with all bits zero. SLICE típusok 21

22 enum, structure, sequence, dictionary exception, interface operation nonmutating- nem változtat állapotot idempotent- többször is meghívható nincs overloading SSL, TCP, UDP Batch üzemű üzenetküldés Saját thread ütemezés SLICE egyéb lehetőségek 22

23 ICE működési struktúra 23 Object Adapter Name = MyObjectAdapter EndPoint = -h –p ThreadPool.Size = 10 ICE COMMUNICATOR Object Adapter Object name = MATH Object name = MATH Object name = SQLDB Object name = SQLDB Object

24 SLICE egyéb lehetőségek Printer.ICE module Demo { interface Printer { void printString(string s); }; module Demo { interface Printer { void printString(string s); }; slice2cs Printer.ice 24

25 Szerver oldali leprogramozás Szerver oldali megvalósítás using System; public class PrinterI : Demo.Printer { public override void printString (string s, Ice.Current current) { … Console.WriteLine(s); … } using System; public class PrinterI : Demo.Printer { public override void printString (string s, Ice.Current current) { … Console.WriteLine(s); … } 25

26 Szerver oldali leprogramozás Szerver oldali megvalósítás Szerver oldali főprogram-részlet: public static void Main (string[] args) { Ice.Communicator ic = Ice.Util.initialize ( ref args ); Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints ( „MainAdapter", "default -p 9000"); Ice.Object obj = new PrinterI(); adapter.add( obj, Ice.Util.stringToIdentity("SimplePrinter")); adapter.activate(); ic.waitForShutdown(); } public static void Main (string[] args) { Ice.Communicator ic = Ice.Util.initialize ( ref args ); Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints ( „MainAdapter", "default -p 9000"); Ice.Object obj = new PrinterI(); adapter.add( obj, Ice.Util.stringToIdentity("SimplePrinter")); adapter.activate(); ic.waitForShutdown(); } 26

27 Szerver oldali leprogramozás Szerver oldali megvalósítás Kliens oldali felhasználás: public static void Main (string[] args) { Ice.Communicator ic = Ice.Util.initialize ( ref args ); Ice.ObjectPrx obj = ic.stringToProxy ( "SimplePrinter:default –h p 9000" ); PrinterPrx printer=PrinterPrxHelper.checkedCast(obj); printer.printString("Hello World!"); } public static void Main (string[] args) { Ice.Communicator ic = Ice.Util.initialize ( ref args ); Ice.ObjectPrx obj = ic.stringToProxy ( "SimplePrinter:default –h p 9000" ); PrinterPrx printer=PrinterPrxHelper.checkedCast(obj); printer.printString("Hello World!"); } 27

28 Batched Oneway Latency IceTAODifference Linux7.73 µs µs1609% Windows XP16.78 µs78.47 µs368% Text over Slow Connections ( 56 Kb / sec ) IceTAODifference Message Size6.9 kb7.6 kb10% Transfer Time1.02 s1.12 s10% Text over Slow Connections with Ice Compression IceTAODifference Message Size3.2 kb7.6 kb138% Transfer Time0.47 s1.12 s135% Sebesség-összehasonlítás ( ICE – TAO ) 28

29 29 Eszterházy Károly Főiskola Információtechnológiai tsz Köszönöm a figyelmet… Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán


Letölteni ppt "Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán Eszterházy Károly Főiskola Információtechnológiai tsz. 2005."

Hasonló előadás


Google Hirdetések