a0f33d7cb0ae00ca0361a16cabe442b9.ppt
- Количество слайдов: 29
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 egyszálú, ún. szekvenciális program. 2
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 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: 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: 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 x : = x + 1 . . . lock(x) { x = x+1; }. . . a : = sin(x) / cos(x) . . . 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észeredmé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 Speed-up = szekvenciális futási idő 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 fv. megvalósítása: 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 } interface lekérdezés, egyeztetés 15
Elosztott programozás – WEB service WEB Szerver Web Service: [Web. Method] bool Primszam_e(int x) {. . számítás. . . } HTTP, SOAP, XML Kliens Tetszőleges U. I. : 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 } 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() DLL { port nyitása fv regisztrálása várakozás … } bool b = Primszam_e(10); Proxy kód: DLL értesíteni a futtatót hogy a Primszam_e() fv melyik szerveren fut TCP/IP A két alkalmazás között azonos DLL kell! 17
http: //www. zeroc. com the home of ICE
Elosztott programozás – I. C. E. Szerver Skeleton kód: generálva van a SLICE leírásból bool Primszam_e(int x) {. . . } Kliens bool b = Primszam_e(10); Proxy kód: generálva van a SLICE leírásból 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 print. String(string s); }; }; Win 98 SE Linux on x 86 Win ME Solaris 9 on SPARC JAVA C++ Python V. B. PHP Win 2000 HP-UX 11. 11 on PA-RISC AIX 5. 2 on Power Ice-E for Mobile and Embedded Devices Win XP Mac. OS X 10. 3. x 20
SLICE típusok Type Range of Mapped Type Size of Mapped Type bool false or true ≥ 1 bit byte − 128 − 127 0− 255 ≥ 8 bits 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, excluding the character with all bits zero. Variable-length 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 = My. Object. Adapter End. Point = -h 193. 225. 3. 16 –p 12002 Thread. Pool. Size = 10 Object Adapter Object name = SQLDB Object name = MATH 23
SLICE egyéb lehetőségek Printer. ICE module Demo { interface Printer { void print. String(string s); }; }; slice 2 cs Printer. ice 24
Szerver oldali leprogramozás Szerver oldali megvalósítás using System; public class Printer. I : Demo. Printer { public override void print. String (string s, Ice. Current current) { … Console. Write. Line(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. Object. Adapter adapter = ic. create. Object. Adapter. With. Endpoints ( „Main. Adapter", "default -p 9000"); Ice. Object obj = new Printer. I(); adapter. add( obj, Ice. Util. string. To. Identity("Simple. Printer")); adapter. activate(); ic. wait. For. Shutdown(); } 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. Object. Prx obj = ic. string. To. Proxy ( "Simple. Printer: default –h 192. 168. 1. 100 -p 9000" ); Printer. Prx printer=Printer. Prx. Helper. checked. Cast(obj); printer. print. String("Hello World!"); } 27
Sebesség-összehasonlítás ( ICE – TAO ) Batched Oneway Latency Ice TAO Difference Linux 7. 73 µs 132. 14 µs 1609% Windows XP 16. 78 µs 78. 47 µs 368% Text over Slow Connections ( 56 Kb / sec ) Message Size Transfer Time Ice 6. 9 kb 1. 02 s TAO Difference 7. 6 kb 10% 1. 12 s 10% Text over Slow Connections with Ice Compression Message Size Transfer Time Ice 3. 2 kb 0. 47 s TAO Difference 7. 6 kb 138% 1. 12 s 135% 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
a0f33d7cb0ae00ca0361a16cabe442b9.ppt