„Join minta” változatai közötti eltérés

A Wikipédiából, a szabad enciklopédiából
[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
23. sor: 23. sor:
[[File:JoinPatternFlowDiagram.png|framed|center|Folyamatdiagram a join minta végrehajtásáról; általános illesztés több üzenetre (wait a chord) és az erőforrások szinkronizálása (szabad vagy zárolva)]]
[[File:JoinPatternFlowDiagram.png|framed|center|Folyamatdiagram a join minta végrehajtásáról; általános illesztés több üzenetre (wait a chord) és az erőforrások szinkronizálása (szabad vagy zárolva)]]


A join mintát pi-kalkulusbeli csatornák halmaza definiálja, ami két műveletet definiál, a küldést és a fogadást; emiatt két join kalkulusbeli névre van szükség, egy x csatornanévre és egy x függvénynévre, az érték megszerzéséhez (egy kérés). A join definíció jelentése x() egy hívása, ami visszadja azt az értéket, ami egy x<> csatornán érkezett.
A join mintát pi-kalkulusbeli csatornák halmaza definiálja, ami két műveletet definiál, a küldést és a fogadást; emiatt két join kalkulusbeli névre van szükség, egy x csatornanévre és egy x függvénynévre, az érték megszerzéséhez (egy kérés). A join definíció jelentése x() egy hívása, ami visszadja azt az értéket, ami egy x<> csatornán érkezett. Továbbá ha több függvény fut párhuzamosan, kiváltódik a return folyamat, és együtt szinkronizálódik a többi folyamattal.<ref>{{cite journal
| last1 = Fournet | first1 = Cédric
| last2 = Gonthier | first2 = Georges
| pages=8
| title = The Join Calculus: a Language for Distributed Mobile Programming
| location = Caminha
| year = 2002
| url = http://www.springerlink.com/index/RYTEWY8H1D2ARNPV.pdf
}}</ref>

<syntaxhighlight lang="Pascal">
J ::= //join patterns
| x<y> //message send pattern
| x(y) //function call pattern
| J | JBIS //synchronization
</syntaxhighlight>

''A kliens perspektívájából a csatorna csak deklarál egy metódust, ugyanazzal a névvel és szignatúrával. A kliens üzenetet küld vagy kérést vált ki a metódus hívásával. A folytató metódusnak várnia kell, amíg kérés vagy üzenet érkezett minden csatornán a folytatás When mondatát követően. Ha a folytatás futni kezd, akkor a csatornahívások argumentumai kikerülnek a sorból (elfogyasztódnak), és atomian átadódnak a folytatás paramétereinek.'' {{sfn|Join Patterns for Visual Basic| Claudio V. Russo}}}}
[[File:JoinPatternClassDiagram.png|framed|center|A join minta osztálydiagramja]]

A legtöbb esetben a szinkron hívások sorrendje nem garantált a jobb teljesítmény érdekében. Az üzeneteket egy másik szál is elfogyaszthatja, így a szálnak lehet, hogy tovább kell várnia egy újabb üzenetre.<ref>{{cite journal
| last1 = Russo | first1 = Claudio V.
| title = Join Patterns for Visual Basic
| url = http://portal.acm.org/citation.cfm?doid=1449955.1449770
| page=5
| date= 23 October 2008
| location = Nashville, Tennessee, USA
}}</ref>



[[Kategória: Programtervezési minták]]
[[Kategória: Programtervezési minták]]

A lap 2017. június 30., 19:16-kori változata

A join minta egy konkurrens (párhuzamos, elosztott) programtervezési minta, aminek lényege, hogy a szálak üzenetátadással kommunikálnak. A zárolással szemben magas szintű programozási modell, ami kommunikációs szerkezetmodellt használ, hogy elvonatkoztasson a környezet bonyolultságától, és lehetővé tegye a skálázást. Az üzenetek elfogyasztását atominak tekinti, még akkor is, ha több csatornán érkeztek az üzenetek.

Ez a minta a join-kalkuluson alapul, és mintaillesztést használ. Konkrétan ezt azzal valósítja meg, hogy lehetővé teszi függvények join definícióját, és/vagy csatornákat, amelyek konkurrens hívásra illeszkednek, továbbá üzenetminták is definiálhatók. Konkurrens programtervezési minták mintája (metaminta), mivel egyszerűbbé és hatékonyabbá teszi ezeknek az entitásoknak a kommunikációt és a többszálú programozási paradigma használatát.

Leírása

A join-minta egy magasabb csővezeték, szinkronizációval és mintaillesztéssel. Valójában a fogalom összegezhető illesztéssel és csatlakozással néhány üzenetre, amelyek különböző üzenetsorokból származnak, majd egyetlen kezelővel egyszerre kezeli őket.[1] Az első elvárt kommunikációs lépés jelezhető a when kulcsszóval, a felcsatlakozás és párosítás and kulcsszóval, és a különféle feladatok futtatása a do kulcsszóval. A join minta tipikus formája:

j.When(a1).And(a2). ... .And(an).Do(d)

A When(a1) első argumentuma lehet szinkron vagy aszinkron csatorna, de lehet csatornák tömbje is. Minden további argumentumnak aszinkron csatornának kell lennie.[2]

Pontosabban, ha egy üzenet illeszkedik minták egy összekapcsolt sorozatára, akkor elindul a kezelője egy új szálban, ha aszinkron kontextusban van, különben az üzenetnek várnia kell addig, amíg nem illeszkedik egy minta az ő valamelyik mintájára. Ha több illeszkedés van, akkor nem specifikált, hogy melyik minta választódik ki.[3] Egy eseménykezelővel szemben, ami egy időben egyszerre több alternatív esemény egyikét szolgálja ki, a join minta csatornák konjunkciójára vár, és verseng a végrehajtásért minden más megengedett mintával.[4]

Folyamatdiagram a join minta végrehajtásáról; általános illesztés több üzenetre (wait a chord) és az erőforrások szinkronizálása (szabad vagy zárolva)

A join mintát pi-kalkulusbeli csatornák halmaza definiálja, ami két műveletet definiál, a küldést és a fogadást; emiatt két join kalkulusbeli névre van szükség, egy x csatornanévre és egy x függvénynévre, az érték megszerzéséhez (egy kérés). A join definíció jelentése x() egy hívása, ami visszadja azt az értéket, ami egy x<> csatornán érkezett. Továbbá ha több függvény fut párhuzamosan, kiváltódik a return folyamat, és együtt szinkronizálódik a többi folyamattal.[5]

J ::= //join patterns
| x<y> //message send pattern
| x(y) //function call pattern
| J | JBIS //synchronization

A kliens perspektívájából a csatorna csak deklarál egy metódust, ugyanazzal a névvel és szignatúrával. A kliens üzenetet küld vagy kérést vált ki a metódus hívásával. A folytató metódusnak várnia kell, amíg kérés vagy üzenet érkezett minden csatornán a folytatás When mondatát követően. Ha a folytatás futni kezd, akkor a csatornahívások argumentumai kikerülnek a sorból (elfogyasztódnak), és atomian átadódnak a folytatás paramétereinek. [6]}}

A join minta osztálydiagramja

A legtöbb esetben a szinkron hívások sorrendje nem garantált a jobb teljesítmény érdekében. Az üzeneteket egy másik szál is elfogyaszthatja, így a szálnak lehet, hogy tovább kell várnia egy újabb üzenetre.[7]

  1. Taral Dragon: Join Calculus, 2009. október 25. (Hozzáférés: 2012)
  2. (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 10. o.  
  3. Parallel C#. (Hozzáférés: 2012)
  4. „Join Patterns for Visual Basic”, 2. o.  
  5. (2002) „The Join Calculus: a Language for Distributed Mobile Programming”, Caminha, 8. o.  
  6. Join Patterns for Visual Basic Claudio V. Russo.
  7. (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 5. o.