elosztott programozás i.c.e.-al c#-ban
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/1.jpg)
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
![Page 2: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/2.jpg)
Szekvenciális programozás
22
Programozás ≈ Algoritmus implementálása
Algoritmus jellemzője: egyértelmű!
Így a kapott program egy egyszálú, ún. szekvenciális program.
![Page 3: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/3.jpg)
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
![Page 4: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/4.jpg)
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
![Page 5: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/5.jpg)
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
![Page 6: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/6.jpg)
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
![Page 7: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/7.jpg)
Többszálú programozás
7
Közös memóriaterületek hozzáférésének szinkronizálása
x := x + 1a := 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);
}
...
![Page 8: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/8.jpg)
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
![Page 9: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/9.jpg)
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
![Page 10: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/10.jpg)
Elosztott programozás
Szerver
A szolgáltatást nyújtja
A szolgáltatást igénybe veszi
adatok
adatok
10
Kliens
![Page 11: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/11.jpg)
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)
![Page 12: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/12.jpg)
Elosztott programozás
Speed-up =
Overhead: nem az algoritmusból eredő plusz idők
szekvenciális futási idő elosztott futási idő
12
![Page 13: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/13.jpg)
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.
![Page 14: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/14.jpg)
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.
![Page 15: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/15.jpg)
fv. megvalósítása: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:fv. meghívása:
bool b = Primszam_e(10);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
![Page 16: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/16.jpg)
Generált kód:Generált kód:
Elosztott programozás – WEB service
Web Service:Web Service:
16
WEB SzerverWEB Szerver
[WebMethod]bool Primszam_e(int x)
{
.. számítás ...
...
}
[WebMethod]bool Primszam_e(int x)
{
.. számítás ...
...
}
KliensKliens
Tetszőleges U.I. :Tetszőleges U.I. :
bool b = Primszam_e(10);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úInteroperábilis, típus-biztos, de lassú
![Page 17: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/17.jpg)
Proxy kód:Proxy kód:
Elosztott programozás – Remoting
Remote Service:Remote Service:
17
SzerverSzerver
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 …
}
KliensKliens
Tetszőleges U.I. :Tetszőleges U.I. :
bool b = Primszam_e(10);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!A két alkalmazás között azonos DLL kell!
TCP/IP
DLL
![Page 19: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/19.jpg)
Proxy kód:Proxy kód:
Elosztott programozás – I.C.E.
19
SzerverSzerver
bool Primszam_e(int x) { ... }bool Primszam_e(int x) { ... }
KliensKliens
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ássalkell rögzíteni: SLICE
A szerver interface-t egy nyelvfüggetlen leírássalkell rögzíteni: SLICE
TCP/IP
bool b = Primszam_e(10);bool b = Primszam_e(10);
I.C.E. kommunikációs DLL
Skeleton kód:Skeleton kód:generálva van a SLICE
leírásból
generálva van a SLICE
leírásból
![Page 20: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/20.jpg)
Printer.ICEPrinter.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 SE Win 2000 Win XP
Linux on x86
Solaris 9 on SPARC
HP-UX 11.11 on PA-RISC
AIX 5.2 on Power
Win ME
MacOS X 10.3.x
Ice-E for Mobile and Embedded Devices
![Page 21: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/21.jpg)
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-lengthexcluding the character with all bits zero.
SLICE típusok
21
![Page 22: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/22.jpg)
enum, structure, sequence, dictionary
exception , interface
operationnonmutating- nem változtat állapototidempotent - 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
![Page 23: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/23.jpg)
ICE működési struktúra
23
Object AdapterName = MyObjectAdapter
EndPoint = -h 193.225.3.16 –p 12002ThreadPool.Size = 10
ICE COMMUNICATORICE COMMUNICATOR
Object Adapter
Object Adapter
Obje
ct n
am
e =
MA
TH
Obje
ct n
am
e =
MA
TH
Ob
ject
nam
e =
SQ
LDB
Obje
ct n
am
e =
SQ
LDB
Ob
ject
Obje
ct
Ob
ject
Obje
ct
![Page 24: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/24.jpg)
SLICE egyéb lehetőségek
Printer.ICEPrinter.ICE
module Demo { interface Printer { void printString(string s); }; };
module Demo { interface Printer { void printString(string s); }; };
slice2cs Printer.ice
24
![Page 25: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/25.jpg)
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver 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
![Page 26: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/26.jpg)
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver oldali megvalósításSzerver oldali főprogram-részlet: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
![Page 27: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/27.jpg)
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver oldali megvalósításKliens oldali felhasználá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 192.168.1.100 -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 192.168.1.100 -p 9000" );
PrinterPrx printer=PrinterPrxHelper.checkedCast(obj);
printer.printString("Hello World!");
}
27
![Page 28: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/28.jpg)
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 )
Ice TAO Difference
Message Size 6.9 kb 7.6 kb 10%
Transfer Time 1.02 s 1.12 s 10%
Text over Slow Connections with Ice Compression
Ice TAO Difference
Message Size 3.2 kb 7.6 kb 138%
Transfer Time 0.47 s 1.12 s 135%
Sebesség-összehasonlítás ( ICE – TAO )
28
![Page 29: Elosztott programozás I.C.E.-al C#-ban](https://reader035.vdocuments.mx/reader035/viewer/2022062423/56814d70550346895dbabf98/html5/thumbnails/29.jpg)
29
Eszterházy Károly Főiskola
Információtechnológiai tsz.
2005
Köszönöm a figyelmet…
Elosztott programozás
I.C.E.-al C#-ban
Hernyák Zoltán