1 / 29

Elosztott programozás I.C.E.-al C#-ban

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

elton
Download Presentation

Elosztott programozás I.C.E.-al C#-ban

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

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

  11. 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

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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. http://www.zeroc.com the home of ICE

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. SLICE egyéb lehetőségek Printer.ICE 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); … } } 25

  26. 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

  27. 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

  28. 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

  29. 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

More Related