A színészmodell a párhuzamos számítások matematikai modellje , amely a színész fogalma köré épül ( angol. actor "actor; acting Subjekt"), amelyet a párhuzamos végrehajtás univerzális primitívjének tekintenek. Ebben a modellben a szereplők úgy lépnek kapcsolatba, hogy üzeneteket cserélnek más szereplőkkel, és a kapott üzenetekre reagálva mindegyikük helyi döntéseket hozhat, új szereplőket hozhat létre, saját üzeneteket küldhet, és meghatározhatja, hogyan válaszoljon a következő üzenetekre.
Számos párhuzamos rendszerek gyakorlati megvalósításának elméleti alapjaként jött létre .
A modell fő gondolatait és alapjait 1973 -ban Hewitt, Bishop és Steiger [1] publikációja fektette le . A Lisp , Simula programozási nyelvek és a Smalltalk korai verziói , valamint a parametrikus védelem és a csomagváltás módszerei befolyásolták a modellalkotás folyamatát . A modell megalkotásának fő motivációja az elosztott számítástechnikai rendszerek felépítése volt , amelyek több száz és ezer független számítógépre épülnek, amelyek saját lokális memóriával és kommunikációs interfésszel vannak felszerelve [2] . A többprocesszoros rendszerek és a többmagos architektúrák megjelenésével az aktormodell iránti érdeklődés az elosztott rendszerek kontextusán kívül is megnőtt.
1975-ben kidolgozták az operatív szemantikát a színészmodellhez [3] [4] . 1977-ben kidolgozták a színészmodellek axiomatikus törvényszerűségeinek rendszerét [5] . 1981-ben létrehozták a modell denotációs szemantikáját (átmenetek szemantikája) [2] [6] , 1985-ben fejlesztették és általánosították [7] ; e munkák eredményeként a színészmodellek elméletét kidolgozottnak és kidolgozottnak ismerik el.
Az 1990-es években olyan formalizmusokat hoztak létre, amelyek nem teljesen felelnek meg az aktormodellnek (nem formalizálják a garantált üzenettovábbítást), de gyakorlati érdeklődésre számot tartóak, különösen számos különböző aktor algebra [8] [9] és lineáris logikán alapuló értelmezés. [10] .
Az objektum-orientált programozás filozófiájának analógiájával , ahol minden primitívet objektumnak tekintünk, az aktormodell kiemeli a „szereplő” mint univerzális entitás fogalmát. A szereplő egy számítási entitás, amely egy fogadott üzenetre reagálva egyidejűleg:
Nem feltételezzük, hogy a fenti műveleteknek van egy meghatározott sorrendje, és mindegyik párhuzamosan végrehajtható.
A feladó elkülönítése a küldött üzenetektől az aktor modell alapvető vívmánya volt: üzenettovábbítás formájában aszinkron kommunikációt és struktúrák vezérlését biztosítja [11] .
Az üzenetek címzettjeit egy cím azonosítja, amelyet néha "postacímnek" is neveznek. Így egy színész csak azokkal a szereplőkkel léphet kapcsolatba, akiknek a címe van, tud címeket kinyerni a kapott üzenetekből, vagy előre tudhatja azokat, ha a színész maga hozta létre.
A modellre jellemző a számítások inherens párhuzamossága a szereplőkön belül és a szereplők között, a szereplők dinamikus létrehozása, a szereplők címeinek beillesztése az üzenetekbe, valamint az üzenetek érkezési sorrendjének korlátozása nélkül , csak közvetlen aszinkron üzenetküldés révén való interakció.
A szereplőmodell modellezési, megértési és érvelési alapként használható számos párhuzamos rendszeren , például:
Talán az első párhuzamos programok a megszakításkezelők voltak . Működés közben a számítógépnek általában reagálnia kell azokra a külső eseményekre, amelyek egy korábban ismeretlen időpontban fordulhatnak elő (az éppen futó programhoz képest aszinkron módon) - például azért, hogy kívülről információkat (karaktereket a billentyűzetről) kapjon. , csomagok a hálózatról stb.). Az ilyen események leghatékonyabb kezelése úgynevezett megszakításokkal valósul meg. Amikor egy esemény bekövetkezik, az aktuális program végrehajtása "megszakad", és elindul a megszakításkezelő , amely elvégzi az eseményre való reagáláshoz szükséges műveleteket (például fogadja a bejövő információkat és egy pufferben tárolja, ahonnan később olvasható), ami után a főprogram onnan folytatja a munkát, ahol abbahagyta .
Az 1960-as évek elején a megszakításokat elkezdték használni több program egyidejű futtatásának szimulálására egyetlen processzoron [13] . Az osztott memóriával való párhuzamosság jelenléte a párhuzamosság- szabályozás problémájához vezetett. Kezdetben ezt a feladatot egy külön számítógépen lévő mutexek egyikeként képzelték el . Edsger Dijkstra szemaforokat fejlesztett ki , majd 1971 és 1973 között Charles Hoare és Per Hansen monitorokat [14] [15] [16] fejlesztettek ki a mutex probléma megoldására . Azonban ezek a megoldások egyike sem hozott létre olyan konstrukciókat programozási nyelveken, amelyek a megosztott erőforrásokhoz való hozzáférést tartalmaznák. A kapszulázást később Hewitt és Atkinson végezte el sorosító konstrukciók segítségével ([Hewitt, Atkinson 1977, 1979] és [Atkinson 1980]).
Az első számítási modellek (pl. Turing -gép , Postagép , lambda-számítás stb.) matematikán alapultak, és a globális állapot fogalmát használták a "számítási lépés" meghatározására (később ezeket a fogalmakat McCarthy , ill . Dijkstra [17] [18 ] ). Minden számítási lépés az egyik globális számítási állapotból a másikba ment. A globális állapot megközelítést az automataelméletben is folytatták véges automaták és veremgépek esetében, beleértve azok nem determinisztikus változatait is. Az ilyen nem-determinisztikus automaták korlátozott non-determinizmus tulajdonsággal rendelkeznek. Azaz, ha a gép mindig áll, mielőtt a kezdeti állapotba kerülne, akkor az állapotok száma korlátozott.
Dijkstra továbbfejlesztette a nem-determinisztikus globális állam megközelítést. Dijkstra modellje vitára adott okot a korlátlan nondeterminizmusról, a párhuzamos számítás azon tulajdonságáról, amelynél a kérés kiszolgálásának késleltetési ideje korlátlanná válhat a megosztott erőforrásokért folyó arbitrázsverseny eredményeként, ugyanakkor garantálja, hogy a kérés végül megtörténik. szervizelve. Hewitt azzal érvelt, hogy a színészmodellnek garanciákat kell nyújtania egy szolgáltatás nyújtására. Bár Dijkstra modelljében nem lehet korlátlan idő a szekvenciális műveletek számítógépen történő végrehajtása között, egy párhuzamosan futó program, amely szigorúan meghatározott állapotban kezdte meg munkáját, csak korlátozott számú állapotban szakítható meg [18] ] . Ezért a Dijkstra modellje nem nyújthat garanciát a szolgáltatás nyújtására. Dijkstra azzal érvelt, hogy lehetetlen megvalósítani a korlátlan nondeterminizmust.
Hewitt másként érvelt: nincs korlátozva a konfliktusmegoldó választottbírónak nevezett számítási rész munkájára fordított idő. Az ilyen helyzetek megoldásával a választottbírák foglalkoznak. A számítógép órája aszinkron módon működik a külső bemenetekkel: billentyűzet bemenet, lemezelérés, hálózati bemenet stb. Tehát korlátlan ideig tarthat egy számítógépre küldött üzenet fogadása, és ezalatt a számítógép korlátlan számú állapoton mehet keresztül.
A korlátlan non-determinizmus a régióelméletre épülő Klinger matematikai modellt alkalmazó aktormodell jellemzője [2] . A színészmodellben nincs globális állapot.
A szereplőmodellben lévő üzenetek nem feltétlenül pufferelve vannak. Ez éles különbség a szimultán számítási modell korábbi megközelítéseihez képest. A pufferelés hiánya sok félreértést okozott a színészmodell fejlesztése során, és a mai napig vita tárgya. Egyes kutatók azzal érvelnek, hogy az üzenetek a "levegőben" vagy a "környezetben" vannak pufferelve. Ezenkívül az aktormodellben szereplő üzenetek egyszerűen elküldésre kerülnek (például az IP -ben lévő csomagok ). Nincs szükség szinkron kézfogásra a címzettel.
A színészmodell természetes fejlődése a címek üzenetek átadásának képessége volt. A csomagkapcsolt hálózatok hatására Hewitt egy új párhuzamos számítási modell kidolgozását javasolta, amelyben a kapcsolatnak egyáltalán nem lenne kötelező mezője, amelyek mindegyike üres lehet. Természetesen, ha az üzenet küldője azt szeretné, hogy a címzett olyan címekhez is hozzáférjen, amelyekkel még nem rendelkezik, akkor a címet az üzenetben el kell küldeni.
A számítás során előfordulhat, hogy üzenetet kell küldeni egy olyan címzettnek, akitől később választ kell kapni. Ennek módja egy másik szereplő címét tartalmazó üzenet küldése, amelyet önéletrajznak neveznek (ezt néha folytatásnak vagy hívásveremnek is nevezik ). A címzett ezután létrehozhat egy válaszüzenetet, amelyet a folytatáskor el kell küldeni .
A szereplők létrehozása, valamint a résztvevők címeinek üzenetekben való szerepeltetése azt jelenti, hogy a szereplőmodell potenciálisan változó topológiával rendelkezik az egymáshoz való viszonyukban, hasonlóan a Simula nyelv objektumaihoz, amelyeknek szintén változó topológiája van az egymáshoz való viszonyukban.
A korábbi, szekvenciális folyamatok kombinálásán alapuló megközelítéssel ellentétben a szereplőmodellt lényegében szimultán modellként tervezték. Ahogy az aktormodellek elméletében is meg van írva, a benne lévő sorozat egy szimultán számításokból adódó speciális eset.
Hewit ellenezte azt a követelményt, hogy az üzeneteknek abban a sorrendben kell megérkezniük a színészmodellhez, ahogyan azokat elküldték. Ha a bejövő üzeneteket rendelni kívánjuk, akkor ezt egy actor queue-val lehet modellezni, amely ezt a funkciót biztosítja. Az ilyen szereplők sorai a bejövő üzeneteket úgy rendezik, hogy azok FIFO sorrendben érkezzenek . Általánosságban elmondható, hogy ha egy X szereplő M1 üzenetet küld egy Y szereplőnek , majd ugyanaz a X szereplő egy másik M2 üzenetet küld Y - nak , akkor nincs követelmény, hogy M1 -nek M2 előtt érkezzen Y -ba .
Ebben a tekintetben az aktor modell a csomagkapcsoló rendszert tükrözi, ami nem garantálja, hogy a csomagok a küldésük sorrendjében fognak érkezni. Az üzenetkézbesítési rendelési garanciák hiánya lehetővé teszi a csomagváltó rendszer számára a csomagok pufferelését, több útvonal használatát a csomagok küldésére, a sérült csomagok újraküldését és egyéb optimalizálási technikák alkalmazását.
Például a szereplők használhatnak üzenetfeldolgozó folyamatot. Ez azt jelenti, hogy az M1 üzenet feldolgozása során a szereplő megváltoztathatja a következő üzenet feldolgozásához használt viselkedést. Ez különösen azt jelenti, hogy még egy M2 üzenet feldolgozását megkezdheti, mielőtt az M1 feldolgozása befejeződik . Csak azért, mert egy szereplő jogosult egy üzenetfeldolgozó folyamat használatára, még nem jelenti azt, hogy ezt a folyamatot kell használnia. Az, hogy egy üzenetet továbbítanak-e vagy sem, technikai kompromisszum kérdése. Honnan tudhatja egy külső szemlélő, hogy egy színész üzenetfeldolgozása átment a csővezetéken? Ebben a tekintetben nincs kétség afelől, hogy egy színész használja-e a csővezeték-képességet. Csak akkor fordulhat elő a várt viselkedéstől eltérő dolog, ha egy adott megvalósításban a csővezetékes optimalizálás végrehajtása helytelenül történik.
Az aktormodell másik fontos jellemzője a lokalitás: az üzenet feldolgozása során a szereplő csak arra a címre küldhet üzenetet, amelyet az üzenetből kapott, azokra a címekre, amelyekkel már az üzenet átvétele előtt rendelkezett, illetve azokra a címekre, amelyeket a feldolgozás során létrehozott. üzenet.
A lokalitás azt is jelenti, hogy egyszerre több címváltozás nem történhet meg. Ebben a tekintetben az aktor modell eltér néhány más párhuzamossági modelltől, például a Petri-hálóktól , amelyekben az implementációk egyszerre több pozícióból távolíthatók el és különböző címekre helyezhetők el.
Az a gondolat, hogy a szereplők rendszereit nagyobb entitásokba állítsák össze , a modularitás fontos aspektusa, amelyet a Gool Ag Ph.D.
Az aktormodell fő újítása a viselkedés fogalmának bevezetése volt, amelyet matematikai függvényként határoztak meg, amely kifejezi a cselekvő cselekedeteit üzenetek feldolgozásakor, beleértve egy új viselkedés meghatározását a következő bejövő üzenet feldolgozásához. A viselkedés biztosítja a párhuzamosság matematikai modelljének működését.
A viselkedés az aktormodellt is megszabadítja a megvalósítás részleteitől, mint például a Smalltalk-72-ben a szál értelmező marker. Fontos azonban megérteni, hogy az aktormodell által leírt rendszerek hatékony megvalósítása fejlett optimalizálást igényel.
Más párhuzamossági rendszerek (például folyamatszámítás ) modellezhetők az aktormodellben a kétfázisú véglegesítési protokoll segítségével [19] .
Az aktor modellben létezik egy számítási reprezentációs tétel zárt rendszerekre, abban az értelemben, hogy nem kapnak üzeneteket kívülről. A matematikai jelölésben a kezdeti viselkedés legjobb közelítéseként egy zárt rendszert, amelyet S - ként jelölünk, ⊥ S -nek építettünk fel, egy S -re felépített közelítő S progressziós viselkedési függvény segítségével a következőképpen (Hewitt 2008-as publikációja szerint):
Jelölje S ≡ ⊔ i∈ω progresszió S i (⊥ S )Így S matematikailag jellemezhető minden lehetséges viselkedésével (beleértve a korlátlan nondeterminizmus figyelembevételét is). Az S jelölése ugyan nem S implementációja , de felhasználható a Church-Turing tézis [20] következő általánosításának bizonyítására : ha egy zárt aktorrendszer egy aktorprimitíve hatékony, akkor lehetséges kimenetei rekurzívan megszámlálhatók. A bizonyítás közvetlenül a számítási reprezentációs tételből következik.
A színészmodell fejlődése érdekes kapcsolatban áll a matematikai logikával. Fejlesztésének egyik fő motivációja a Planner programozási nyelv fejlesztése során felmerült szempontok kezelésének szükségessége volt . A színészmodell eredeti megfogalmazása után fontossá vált a modell erejének meghatározása Robert Kowalski téziséhez képest, amely szerint "a számítások következtetések alapján csoportosíthatók". Kowalski tézise hamisnak bizonyult a színészmodellben végzett szimultán számításoknál. Ez az eredmény továbbra is vitatható, és ellentmond néhány korábbi elképzelésnek, mivel Kowalski tézise igaz a szekvenciális számításokra, sőt néhány párhuzamos számításra is, például lambda-számításokra.
Ennek ellenére történtek kísérletek a logikai programozás kiterjesztésére a párhuzamos számítástechnikára. Hewitt és Aga egy 1999-es cikkében azonban azt állítják, hogy az eredményül kapott rendszer nem deduktív a következő értelemben: a párhuzamos logikai programozási rendszerek számítási lépései nem következnek deduktív módon az előző lépésekből.
A migráció a színészmodellben a színész azon képessége, hogy megváltoztassa a helyét. Aki Yonezawa például dolgozatában egy olyan postai szolgáltatást modellezett, amelyben a kliens szereplők beléphetnek, futás közben helyet változtathatnak és kiléphetnek. A vándorolni tudó színészt olyan színészként modellezték, akinek egy meghatározott helyszíne változik, amikor a színész vándorol. Ennek a szimulációnak a megbízhatósága azonban ellentmondásos, és kutatás tárgya.
A szereplőket a következő módok egyikével lehet biztosítani:
A színészmodell egyik finom pontja a színész címének szintetizálásának képessége. Egyes esetekben a biztonsági rendszer letilthatja a címek szintézisét. Mivel egy színész megszólítása csak egy bit karakterlánc, nyilván lehetséges szintetizálni, bár ha elég hosszú a bitsor, akkor elég nehéz, sőt lehetetlen megtalálni a színész címét. A SOAP azt az URL -t használja végpont címként, ahol a szereplő található . Mivel az URL egy karakterlánc, nyilván lehetséges szintetizálni, bár titkosítás alkalmazása esetén szinte lehetetlen felvenni a karakterláncot.
A szereplőcím-szintézist általában leképezéssel modellezik. Az ötlet az, hogy a szereplőrendszer segítségével leképezzük a szereplők tényleges címét. Például egy számítógép memóriastruktúrája modellezhető szereplők rendszereként, amely leképezést ad. A SOAP -címek esetében ez a DNS - modellezés és az URL - leképezés .
Robin Milner első publikált munkája a párhuzamosságról [21] figyelemre méltó, hogy nem szekvenciális folyamatösszetételen alapult, ami különbözött a szereplőmodelltől, mivel rögzített számú folyamaton, a sortopológiában használt sortopológiában rögzített számú hivatkozáson alapult. szinkronizálja a linket. Az Anthony Hoare [22] által közzétett eredeti Cooperating Serial Processes (CSP) modell azért különbözik az aktor modelltől, mert rögzített számú, fix topológiában összekapcsolt, és folyamaton alapuló szinkron üzenettovábbítással kommunikáló folyamatok párhuzamos összetételén alapul. neveket. A CSP későbbi verziói eltávolodtak a folyamatneveken alapuló kommunikációtól, és átvették a csöveken keresztüli névtelen kommunikáció elvét. Ezt a megközelítést alkalmazzák Milnernek a kommunikáló rendszerek számításáról és a pi-kalkulusról szóló munkájában is .
Milner és Hoare mindkét korai modellje korlátozott nondeterminizmussal rendelkezik. A kölcsönható rendszerek modern elméleti modelljei [23] közvetlenül biztosítják a korlátlan nondeterminizmust.
Negyven évvel a Moore-törvény megjelenése után a chipek teljesítményének folyamatos növekedése a lokális és globális masszív párhuzamosság módszereinek köszönhető. A helyi párhuzamosságot a 64 bites többmagos mikroprocesszorok új chipjeiben, a többchipes modulokban és a nagy teljesítményű kommunikációs rendszerekben alkalmazzák. A globális párhuzamosság jelenleg engedélyezett az új vezetékes és vezeték nélküli szélessávú csomagkapcsolt hardverekben. A tárolókapacitás mind a lokális, mind a globális párhuzamosság miatt exponenciálisan növekszik.
A modell a számítástechnikai rendszerek felépítésének alábbi problémáinak megoldására irányul:
Az aktormodellekbe bevezetett ötletek közül sokat ma már többügynökös rendszerekben is alkalmaznak ugyanezen okokból [24] . A fő különbség az, hogy a rendszer ügynöke (a legtöbb definícióban) további korlátozásokat támaszt a szereplőkkel szemben, jellemzően kötelezettségvállalások és célok használatára kötelezi őket.
Az aktor modellt számítási felhő kliensekben is használják [25] .
A színésztámogatással rendelkező korai programozási nyelvek közé tartozik az Act 1, 2 és 3 [26] [27] , Acttalk [28] , Ani [29] , Cantor [30] , Rosette [31]
Újabb színészmodell-orientált nyelvek: Actor-Based Concurrent Language (ABCL), ActorScript, AmbientTalk [32] , Axum [33] . A színész fogalmát használó általános célú programozási nyelvek közé tartozik az E , Elixir [34] , Erlang , Io , SALSA [35] , Scala [36] [37] .
A szereplőkkel rendelkező könyvtárakat és táblázatstruktúrákat úgy fejlesztették ki, hogy színészszerű programozási stílust biztosítsanak olyan nyelveken, amelyek nem rendelkeznek beépített szereplőkkel.
Könyvtárak és táblaszerkezetek szereplőkkel | |||
---|---|---|---|
Név | Utolsó megjelenési dátum | Engedély | Programozási nyelvek |
ActiveJava | 2008 | ? | Jáva |
Színész | 2013-05-31 | MIT | Jáva |
Színész-CPP | 2012-03-10 [38] | GPL 2.0 | C++ |
Actor Framework | 2013-11-13 | Apache 2.0 | .HÁLÓ |
ActorKit | 2011. 09. 13. [39] | BSD | Célkitűzés-C |
Akka | 2015-04-23 | Apache 2.0 | Java és Scala |
Akka.NET | 2016-01-18 | Apache 2.0 | .HÁLÓ |
C++ Actor Framework (CAF) | 2015. 11. 25. [40] | Boost Software License 1.0 és BSD 3-Clause | C++11 |
Celluloid | 2016-01-19 [41] | MIT | rubin |
Haskell felhő | 2015-06-17 [42] | BSD | Haskell |
CloudI | 2015. 12. 24. [43] | BSD | C/C++, Elixir/Erlang/LFE, Java, Javascript, Perl, PHP, Python, Ruby |
Funkcionális Java | 2016-02-15 [44] | BSD | Jáva |
GPars | 2014-05-09 [45] | Apache 2.0 | Groovy |
jetlang | 2013-05-30 [46] | ÚjBSD | Jáva |
Korus | 2010-02-04 | GPL 3 | Jáva |
[ 47 ] | 2011. 10. 13. [48] | MIT | Jáva |
LabVIEW Actor Framework | 2012-03-01 [49] | ? | LabVIEW |
libprocess | 2013-06-19 | Apache 2.0 | C++ |
NAct | 2012-02-28 | LGPL 3.0 | .HÁLÓ |
OOSMOS | 2016-02-17 [50] | GPL 2.0 és kereskedelmi | C, C++ |
Pálya | 2016-02-16 [51] | ÚjBSD | Jáva |
Orleans | 2019-06-04 [52] | MIT | .HÁLÓ |
Panini | 2014-05-22 | MPL 1.1 | Saját programozási nyelv |
Peernetikus | 2007-06-29 | LGPL 3.0 | Jáva |
PostSharp | 2014-09-24 | Kereskedelmi / Freemium | .HÁLÓ |
Pulzár | 2016. 11. 24. [53] | ÚjBSD | Piton |
Pulzár | 2016-02-18 [54] | LGPL / Eclipse | Clojure |
Pykka | 2022-05-28 [55] | Apache 2.0 | Piton |
React.Net | ? | MIT | .HÁLÓ |
Retlang | 2011. 05. 18. [56] | ÚjBSD | .HÁLÓ |
forgórész | 2022-05-23 | MIT | C++17 |
S4 | 2012-07-31 [57] | Apache 2.0 | Jáva |
SOobjektizáló | 2016-02-11 | ÚjBSD | C++11 |
Termesz-séma | 2009-05-21 | LGPL | Rendszer |
Theron | 2014-01-18 [58] | M.I.T. [59] | C++ |
színész | 2019-09-11 [60] | GoDaddy nyilvános kiadás [61] | Piton |
QP | 2015-09-29 [62] | GPL 2.0 és kereskedelmi | C és C++ |
kvazár | 2016-01-18 [63] | LGPL / Eclipse | Jáva |