Ugrás a tartalomhoz

„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
→‎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-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.
}}</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]

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]

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]

  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.  
  8. (2008. október 23.) „Join Patterns for Visual Basic”, Nashville, Tennessee, USA, 18. o.  
  9. (2007. szeptember 25.) „Compiling Join-Patterns”, Le Chesnay France.  
  10. (1996) „A Calculus of Mobile Agents”, Le Chesnay, 406–421. o, Kiadó: Concurrency Theory.  
  11. (2000. szeptember 1.) „JoCaml: a language for concurrent distributed and mobile programming.”. In Advanced Functional Programming, 4th International SchoolOxford, August 2002 2638.  
  12. (1999) „JoCaml: Mobile agents for Objective-Caml”. In First International Symposium on AgentSystems and Applications. (ASA'99)/Third International Symposium onMobile Agents (MA'99).  
  13. (2000. szeptember 1.) „An overview of functional nets.”. Summer School, Caminha, Portugal, September 2000 2395.  
  14. (2000) „Functional nets.”. In Proceedings of the European Symposium on Programming. Lecture Notes in Computer Science 1782.  
  15. (2001) „Join Java: An alternative concurrency semantics for Java”. Echnical Report ACRC-01-001, University of South Australia.