„Join minta” változatai közötti eltérés
[ellenőrzött változat] | [ellenőrzött változat] |
→Leírása: Története |
|||
63. sor: | 63. sor: | ||
| date= 23 October 2008 |
| date= 23 October 2008 |
||
| location = Nashville, Tennessee, USA |
| location = Nashville, Tennessee, USA |
||
}}</ref> A join |
}}</ref> A [[join kalkulus]] kifejezőképessége megegyezik a π-kalkuluséval. Arra fejlesztették ki, hogy formális megalapozást adjon az elosztott programozási nyelvekhez, így elkerüli a más folyamatkalkulusokban használt kommunikációs szerkezeteket, például a randevúkat. |
||
===Elosztott join kalkulus - 1996=== |
|||
A join kalkulus névátadó kalkulus, és egyben magnyelv a konkurrens és elosztott programozáshoz.<ref name="Compiling Join-Patterns">{{cite journal |
|||
| last1 = Maranget | first1 = Luc |
|||
| last2 = Le Fessant | first2 = Fabrice |
|||
| title = Compiling Join-Patterns |
|||
| url = http://hevea.inria.fr/examples/pat.html |
|||
| date= 25 September 2007 |
|||
| location = Le Chesnay France |
|||
}}</ref> Az [[elosztott join kalkulus]] a join kalkuluson alapul, de az elosztott számításokhoz kibővítve.<ref name="mobileagents">{{cite journal |
|||
| last1 = Fournet | first1 = Cédric |
|||
| last2 = Gonthier | first2 = Georges |
|||
| last3 = Levy | first3 = Jean-Jacques |
|||
| last4 = Maranget | first4 = Luc |
|||
| title = A Calculus of Mobile Agents |
|||
| location = Le Chesnay |
|||
| year = 1996 |
|||
| pages=406–421 |
|||
| publisher = Concurrency Theory |
|||
| url = http://www.springerlink.com/index/PP23215G0035M6NQ.pdf |
|||
}}</ref> Mobil ágenseket használ, ahol az ágensek nem egyszerűen programok, hanem futó folyamatok, a saját kommunikációs képességeikkel. |
|||
===JoCaml, Funnel és Join Java - 2000=== |
|||
A JoCaml<ref>{{cite journal|last1=Fournet|first1=Cedric|last2=Le Fessant|first2=Fabrice|last3=Maranget|first3=Luc|last4=Schmitt|first4=A. |title=JoCaml: a language for concurrent distributed and mobile programming.|journal=In Advanced Functional Programming, 4th International SchoolOxford, August 2002|volume=2638|date=September 2000}}</ref><ref>{{cite journal|last1=Conchon|first1=S.|last2=Le Fessant|first2=F.|title=JoCaml: Mobile agents for Objective-Caml|journal=In First International Symposium on AgentSystems and Applications. (ASA'99)/Third International Symposium onMobile Agents (MA'99)|year=1999}}</ref> és a Funnel<ref>{{cite journal|last1=Odersky|first1=Martin|title=An overview of functional nets.|journal=Summer School, Caminha, Portugal, September 2000|volume=2395|date=September 2000}}</ref><ref>{{cite journal|last1=Odersky|first1=Martin|title=Functional nets.|journal=In Proceedings of the European Symposium on Programming. Lecture Notes in Computer Science|volume=1782|year=2000}}</ref> [[funkcionális programozási nyelvek]], amelyek támogatják a join minták deklarálását. Közvetlenül valósítják meg a join kalkulust funkcionális programozási nyelvekben. |
|||
Egy másik kiterjesztés egy nem szabványos kiterjesztés, a Java, JoinJava, amit Itzstein és Kearney javasolt.<ref>{{cite journal|last1=Itzstein|first1=G. S.|last2=Kearney|first2=D.|title=Join Java: An alternative concurrency semantics for Java|journal=Echnical Report ACRC-01-001, University of South Australia|year=2001}}</ref> |
|||
[[Kategória: Programtervezési minták]] |
[[Kategória: Programtervezési minták]] |
A lap 2017. július 3., 12:41-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. Angolul chordnak is nevezik. 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]
Története
π-kalkulus - 1992
A π-kalkulus a folyamatkalkulusok családjába tartozik, aminek segítségével matematikai képletekkel írja le és elemzi a konkurrens számítások sorozatát elnevezett csatornák bevezetésével, így a folyamatok kommunikálhatnak csatornákon keresztül, így leírhatók olyan konkurrens számítások is, amelyek hálózatkonfigurációja dinamikusan, futásidőben változik.
Join kalkulus - 1993
A join minták először Fournet és Gonthier alapvető join kalkulusával jelentek meg, mint aszinkron folyamatalgebra, amit elosztott környezetben hatékony implementációhoz terveztek.[8] A join kalkulus kifejezőképessége megegyezik a π-kalkuluséval. Arra fejlesztették ki, hogy formális megalapozást adjon az elosztott programozási nyelvekhez, így elkerüli a más folyamatkalkulusokban használt kommunikációs szerkezeteket, például a randevúkat.
Elosztott join kalkulus - 1996
A join kalkulus névátadó kalkulus, és egyben magnyelv a konkurrens és elosztott programozáshoz.[9] Az elosztott join kalkulus a join kalkuluson alapul, de az elosztott számításokhoz kibővítve.[10] Mobil ágenseket használ, ahol az ágensek nem egyszerűen programok, hanem futó folyamatok, a saját kommunikációs képességeikkel.
JoCaml, Funnel és Join Java - 2000
A JoCaml[11][12] és a Funnel[13][14] funkcionális programozási nyelvek, amelyek támogatják a join minták deklarálását. Közvetlenül valósítják meg a join kalkulust funkcionális programozási nyelvekben.
Egy másik kiterjesztés egy nem szabványos kiterjesztés, a Java, JoinJava, amit Itzstein és Kearney javasolt.[15]
- ↑ 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.
- ↑ (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 18. o.
- ↑ (2007. szeptember 25.) „Compiling Join-Patterns”, Le Chesnay France.
- ↑ (1996) „A Calculus of Mobile Agents”, Le Chesnay, 406–421. o, Kiadó: Concurrency Theory.
- ↑ (2000. szeptember 1.) „JoCaml: a language for concurrent distributed and mobile programming.”. In Advanced Functional Programming, 4th International SchoolOxford, August 2002 2638.
- ↑ (1999) „JoCaml: Mobile agents for Objective-Caml”. In First International Symposium on AgentSystems and Applications. (ASA'99)/Third International Symposium onMobile Agents (MA'99).
- ↑ (2000. szeptember 1.) „An overview of functional nets.”. Summer School, Caminha, Portugal, September 2000 2395.
- ↑ (2000) „Functional nets.”. In Proceedings of the European Symposium on Programming. Lecture Notes in Computer Science 1782.
- ↑ (2001) „Join Java: An alternative concurrency semantics for Java”. Echnical Report ACRC-01-001, University of South Australia.