„Join minta” változatai közötti eltérés
[ellenőrzött változat] | [ellenőrzött változat] |
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]
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 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]
- ↑ Taral Dragon: Join Calculus, 2009. október 25. (Hozzáférés: 2012)
- ↑ (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 10. o.
- ↑ Parallel C#. (Hozzáférés: 2012)
- ↑ „Join Patterns for Visual Basic”, 2. o.
- ↑ (2002) „The Join Calculus: a Language for Distributed Mobile Programming”, Caminha, 8. o.
- ↑ Join Patterns for Visual Basic Claudio V. Russo.
- ↑ (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 5. o.