290 likes | 454 Views
Elosztott programozás I.C.E.-al C#-ban. Hernyák Zoltán. 2005. Eszterházy Károly Főiskola. Információtechnológiai tsz. Szekvenciális programozás. Programozás ≈ Algoritmus implementálása Algoritmus jellemzője: egyértelmű ! Így a kapott program egy egyszálú, ún. szekvenciális
E N D
Elosztott programozás I.C.E.-al C#-ban Hernyák Zoltán 2005 Eszterházy Károly Főiskola Információtechnológiai tsz.
Szekvenciális programozás Programozás ≈ Algoritmus implementálása Algoritmus jellemzője: egyértelmű! Így a kapott program egy egyszálú, ún. szekvenciális program. 2 2
Szekvenciális programozás 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 3
Szekvenciális programozás 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 4
Többszálú programozás 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 5
Többszálú programozás 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 6
Többszálú programozás Közös memóriaterületek hozzáférésének szinkronizálása a := sin(x) / cos(x) x := x + 1 ... lock(x) { x = x+1; } ... ... lock(x) { a = sin(x) / cos(x); } ... 7
Elosztott programozás 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 8
Elosztott programozás • 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 9
Elosztott programozás Kliens adatok Szerver A szolgáltatást igénybe veszi adatok A szolgáltatást nyújtja 10
Elosztott programozás 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) 11
Elosztott programozás szekvenciális futási idő Speed-up = elosztott futási idő Overhead: nem az algoritmusból eredő plusz idők 12
Elosztott programozás 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. 13
Elosztott programozás 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. 14
Elosztott programozás Szerver Kliens fv. megvalósítása: fv. meghívása: bool Primszam_e(int x) { .. számítás ... ... } bool b = Primszam_e(10); 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 15
Elosztott programozás – WEB service WEB Szerver Kliens Web Service: Tetszőleges U.I. : [WebMethod] bool Primszam_e(int x) { .. számítás ... ... } bool b = Primszam_e(10); Generált kód: 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ú 16
Elosztott programozás – Remoting Szerver Kliens Remote Service: Tetszőleges U.I. : bool Primszam_e(int x) { .. számítás ... } void Main() { port nyitása fv regisztrálása várakozás … } bool b = Primszam_e(10); DLL Proxy kód: értesíteni a futtatót hogy a Primszam_e() fv melyik szerveren fut DLL TCP/IP A két alkalmazás között azonos DLL kell! 17
Elosztott programozás – I.C.E. Szerver Kliens Skeleton kód: bool b = Primszam_e(10); generálva van a SLICE leírásból Proxy kód: generálva van a SLICE leírásból bool Primszam_e(int x) { ... } I.C.E. kommunikációs DLL I.C.E. kommunikációs DLL TCP/IP A szerver interface-t egy nyelvfüggetlen leírással kell rögzíteni: SLICE 19
SLICE file Printer.ICE C# module Demo { interface Printer { void printString(string s); }; }; JAVA C++ Python V.B. PHP Win 98 SE Win ME Win 2000 Win XP Linux on x86 Solaris 9 on SPARC HP-UX 11.11 on PA-RISC AIX 5.2 on Power MacOS X 10.3.x Ice-E for Mobile and Embedded Devices 20
SLICE típusok 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. 21
SLICE egyéb lehetőségek 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 22
ICE működési struktúra ICE COMMUNICATOR Object Adapter Name = MyObjectAdapter EndPoint = -h 193.225.3.16 –p 12002 ThreadPool.Size = 10 Object Adapter Object Adapter Object name =MATH Object name = SQLDB Object Object 23
SLICE egyéb lehetőségek Printer.ICE module Demo { interface Printer { void printString(string s); }; }; slice2cs Printer.ice 24
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); … } } 25
Szerver oldali leprogramozás Szerver oldali főprogram-részlet: Szerver oldali megvalósítás 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
Szerver oldali leprogramozás Kliens oldali felhasználás: Szerver oldali megvalósítás public static void Main (string[] args) { Ice.Communicator ic = Ice.Util.initialize ( ref args ); Ice.ObjectPrx obj = ic.stringToProxy ( "SimplePrinter:default –h 192.168.1.100 -p 9000" ); PrinterPrx printer=PrinterPrxHelper.checkedCast(obj); printer.printString("Hello World!"); } 27
Sebesség-összehasonlítás ( ICE – TAO ) Batched Oneway Latency Text over Slow Connections ( 56 Kb / sec ) Text over Slow Connections with Ice Compression 28
Elosztott programozás I.C.E.-al C#-ban Köszönöm a figyelmet… Hernyák Zoltán 2005 Eszterházy Károly Főiskola Információtechnológiai tsz. 29