Näyttelijä malli

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 6.7.2020 tarkistetusta versiosta . tarkastukset vaativat 11 muokkausta .

Näyttelijämalli on rinnakkaislaskennan  matemaattinen malli , joka on rakennettu näyttelijän käsitteen ympärille ( esim .  näyttelijä  "näyttelijä; näyttelijä"), jota pidetään rinnakkaissuorituksen universaalina primitiivinä. Tässä mallissa näyttelijä on vuorovaikutuksessa vaihtamalla viestejä muiden toimijoiden kanssa, ja jokainen voi vastauksena vastaanottamiinsa viesteihin tehdä paikallisia päätöksiä, luoda uusia toimijoita, lähettää omia viestejään ja päättää, kuinka vastata seuraaviin viesteihin.

Luotu teoreettiseksi pohjaksi useille rinnakkaisten järjestelmien käytännön toteutuksille .

Historia

Mallin tärkeimmät ajatukset ja perusta luotiin vuonna 1973 Hewitt, Bishop ja Steigerin julkaisussa [1] . Ohjelmointikielet Lisp , Simula ja Smalltalkin varhaiset versiot sekä parametrisen suojauksen ja pakettivaihdon menetelmät vaikuttivat mallin muodostusprosessiin . Mallin luomisen päämotivaatio oli tehtävä rakentaa hajautettuja laskentajärjestelmiä, jotka perustuivat satoihin ja tuhansiin itsenäisiin tietokoneisiin, jotka on varustettu omalla paikallisella muistilla ja tietoliikenneliitännöillä [2] . Moniprosessorijärjestelmien ja moniydinarkkitehtuurien myötä kiinnostus toimijamallia kohtaan kasvoi myös hajautettujen järjestelmien ulkopuolella.

Vuonna 1975 kehitettiin toiminnallinen semantiikka toimijamallille [3] [4] . Vuonna 1977 kehitettiin toimijamallien aksiomaattisten lakien järjestelmä [5] . Vuonna 1981 mallin denotaatiosemantiikka (siirtymien semantiikka) [2] [6] luotiin , kehitettiin ja yleistettiin vuonna 1985 [7] ; näiden töiden tuloksena toimijamallien teoria tunnustetaan kehitetyksi ja kehitetyksi.

1990-luvulla luotiin formalismeja, jotka eivät täysin vastaa toimijamallia (eivät formalisoi taattua viestin toimitusta), mutta ovat käytännön kiinnostavia, erityisesti useat erilaiset toimijaalgebrat [8] [9] ja lineaariseen logiikkaan perustuva tulkinta. [10] .

Peruskäsitteet

Analogisesti olio-ohjelmoinnin filosofian kanssa , jossa jokaista primitiiviä pidetään objektina, toimijamalli erottaa "toimijan" käsitteen universaalina kokonaisuutena. Toimija on laskennallinen kokonaisuus, joka vastauksena vastaanotettuun viestiin voi samanaikaisesti:

Ei oleta, että edellä mainituilla toimilla on tiettyä järjestystä ja ne voidaan suorittaa kaikki rinnakkain.

Lähettäjän erottaminen lähetetyistä viesteistä oli toimijamallin perustavanlaatuinen saavutus: se tarjoaa asynkronisen viestinnän ja rakenteiden hallinnan viestien välityksen muodossa [11] .

Viestien vastaanottajat tunnistetaan osoitteesta, jota joskus kutsutaan "postiosoitteeksi". Näin ollen näyttelijä voi olla vuorovaikutuksessa vain niiden toimijoiden kanssa, joiden osoitteet hänellä on, voi poimia osoitteita vastaanotetuista viesteistä tai tietää ne etukäteen, jos näyttelijä on ne itse luonut.

Mallille on tunnusomaista laskelmien luontainen rinnakkaisuus toimijoiden sisällä ja välillä, dynaaminen toimijoiden luominen, toimijaosoitteiden sisällyttäminen viesteihin ja vuorovaikutus vain suoran asynkronisen viestinnän kautta ilman rajoituksia viestien saapumisjärjestykseen.

Sovellukset

Toimijamallia voidaan käyttää mallintamisen, ymmärtämisen ja päättelyn perustana useissa samanaikaisissa järjestelmissä , esimerkiksi:

Viestin välityssemantiikka

Rajoittamaton määrä ei-deterministisiä erimielisyyksiä

Ehkä ensimmäiset rinnakkaiset ohjelmat olivat keskeytyskäsittelijöitä . Käytön aikana tietokoneen on pääsääntöisesti reagoitava ulkoisiin tapahtumiin, jotka voivat tapahtua aiemmin tuntemattomalla hetkellä (asynkronisesti käynnissä olevan ohjelman suhteen) - esimerkiksi vastaanottaakseen tietoa ulkopuolelta (merkit näppäimistöltä , paketit verkosta ja niin edelleen). Tällaisten tapahtumien tehokkain käsittely toteutetaan ns. keskeytysten avulla. Tapahtuman sattuessa nykyisen ohjelman suoritus "keskeytyy" ja käynnistetään keskeytyskäsittelijä , joka suorittaa tapahtumaan reagoimiseksi tarvittavat toimenpiteet (esim. vastaanottaa saapuvan tiedon ja tallentaa sen puskuriin, josta se voidaan lukea myöhemmin), jonka jälkeen pääohjelma jatkaa työtä siitä mihin se jäi .

1960-luvun alussa keskeytyksiä alettiin käyttää simuloimaan useiden ohjelmien samanaikaista suorittamista yhdellä prosessorilla [13] . Rinnakkaisuus jaetun muistin kanssa on johtanut samanaikaisuuden hallinnan ongelmaan. Aluksi tämä tehtävä suunniteltiin yhdeksi erillisen tietokoneen mutexeista . Edsger Dijkstra kehitti semaforeja , ja myöhemmin, vuosina 1971-1973, Charles Hoare ja Per Hansen kehittivät monitoreja [14] [15] [16] mutex-ongelman ratkaisemiseksi . Mikään näistä ratkaisuista ei kuitenkaan luonut ohjelmointikielillä konstruktioita, jotka kapseloisivat pääsyn jaettuihin resursseihin. Hewitt ja Atkinson suorittivat myöhemmin kapseloinnin käyttämällä serialisointikonstrukteja ([Hewitt, Atkinson 1977, 1979] ja [Atkinson 1980]).

Ensimmäiset laskentamallit (esim. Turing -kone , postikone , lambda-laskenta jne.) perustuivat matematiikkaan ja käyttivät globaalin tilan käsitettä "laskentavaiheen" määrittämiseen (myöhemmin nämä käsitteet yleistettiin McCarthyn ja Dijkstra [17] [18 ] ). Jokainen laskentavaihe eteni yhdestä globaalista laskentatilasta toiseen. Globaalin tilan lähestymistapaa on jatkettu automaatioteoriassa äärellisille automaateille ja pinokoneille, mukaan lukien niiden ei- deterministiset versiot. Tällaisilla ei-deterministisilla automaateilla on rajoitetun epädeterminismin ominaisuus. Toisin sanoen, jos kone seisoo aina ennen kuin se menee alkutilaan, silloin sen tilojen lukumäärällä on raja.

Dijkstra kehitti ei-determinististä globaalin valtion lähestymistapaa edelleen. Dijkstran malli on herättänyt kiistaa rajoittamattomasta epädeterminismistä, rinnakkaisen laskennan ominaisuudesta, jossa pyynnön käsittelyn viive voi tulla rajattomaksi jaetuista resursseista käytävän arbitraasikilpailun seurauksena, ja samalla taata, että pyyntö lopulta tulee huollettu. Hewitt väitti, että toimijamallin pitäisi tarjota takeita palvelun tuottamisesta. Vaikka Dijkstran mallissa ei voi olla rajattomasti aikaa peräkkäisten toimintojen suorittamisen välillä tietokoneella, rinnakkain käynnissä oleva ohjelma, joka aloitti toimintansa tiukasti määritellyssä tilassa, voidaan keskeyttää vain rajoitetussa määrässä tiloja [18 ] . Siksi Dijkstran malli ei voi taata palvelun toimittamista. Dijkstra väitti, että oli mahdotonta toteuttaa rajatonta epädeterminismia.

Hewitt väitti toisin: ei ole rajoitettu aikaa, joka kuluu laskenta-osion työhön, jota kutsutaan välimieheksi konfliktien ratkaisemiseksi. Välimiehet ratkaisevat tällaiset tilanteet. Tietokoneen kello toimii asynkronisesti ulkoisten tulojen kanssa: näppäimistötulo, levykäyttö, verkkotulo ja niin edelleen. Joten tietokoneelle lähetetyn viestin vastaanottamiseen voi kulua rajattomasti aikaa, ja siinä ajassa tietokone voi käydä läpi rajattoman määrän tiloja.

Rajoittamaton epädeterminismi on tyypillinen piirre toimijamallille, joka käyttää Klingerin matemaattista mallia, joka perustuu alueteoriaan [ [2] . Toimijamallissa ei ole globaalia tilaa.

Suora viestintä ja asynkronisuus

Toimijamallin viestit eivät välttämättä ole puskuroituja. Tämä on sen jyrkkä ero aiemmista lähestymistavoista samanaikaiseen laskentamalliin. Puskuroinnin puute aiheutti paljon väärinkäsityksiä näyttelijämallin kehittämisessä ja on edelleen kiistanalainen aihe tähän päivään asti. Jotkut tutkijat väittävät, että viestit puskuroidaan "ilmaan" tai "ympäristöön". Myös toimijamallin viestit lähetetään yksinkertaisesti (esimerkiksi IP -paketit ). Synkronista kättelyä vastaanottajan kanssa ei vaadita.

Uusien toimijoiden luominen ja osoitteiden välittäminen viesteissä tarkoittaa muuttuvaa topologiaa

Toimijamallin luonnollinen evoluutio oli kyky välittää osoitteita viesteissä. Pakettikytkentäisten verkkojen vaikutuksesta Hewitt ehdotti uuden rinnakkaisen laskentamallin kehittämistä, jossa linkissä ei olisi lainkaan pakollisia kenttiä, jotka kaikki voisivat olla tyhjiä. Tietenkin, jos viestin lähettäjä haluaa vastaanottajalle pääsyn osoitteisiin, joita hänellä ei vielä ole, osoite on lähetettävä viestissä.

Laskennan aikana voi olla tarpeen lähettää viesti vastaanottajalle, jolta on tarkoitus saada vastaus myöhemmin. Tapa tehdä tämä on lähettää toisen toimijan osoitteen sisältävä viesti, jota kutsutaan ansioluetteloksi (joskus kutsutaan myös jatkoksi tai puhelupinoksi ). Vastaanottaja voi sitten luoda vastausviestin, joka lähetetään jatkamisen yhteydessä .

Toimijoiden luominen ja osallistujaosoitteiden sisällyttäminen viesteihin tarkoittaa, että toimijamallilla on potentiaalisesti muuttuva topologia niiden suhteissa toisiinsa, samankaltaisesti kuin Simula-kielen objekteilla, joilla on myös muuttuva topologia suhteessa toisiinsa.

Pohjimmiltaan samanaikaisesti

Toisin kuin aikaisemmassa peräkkäisten prosessien yhdistämisessä, toimijamalli suunniteltiin pohjimmiltaan samanaikaiseksi malliksi. Kuten toimijamallien teoriassa on kirjoitettu, siinä oleva sekvenssi on erikoistapaus, joka syntyy samanaikaisista laskelmista.

Ei viestien tilausvaatimuksia

Hewitt vastusti vaatimusten sisällyttämistä näyttelijämallille, että viestien tulee saapua siinä järjestyksessä kuin ne lähetettiin. Jos halutaan tilata saapuvia viestejä, tämä voidaan mallintaa toimijajonolla, joka tarjoaa tämän toiminnon. Tällaiset toimijajonot järjestäisivät saapuvat viestit niin, että ne vastaanotetaan FIFO -järjestyksessä . Yleisesti ottaen, jos näyttelijä X lähettää viestin M1 näyttelijälle Y , ja sitten sama näyttelijä X lähettää toisen viestin M2 Y : lle , ei ole vaatimusta, että M1 saapuu Y :lle ennen M2 :ta .

Tässä suhteessa toimijamalli peilaa pakettikytkentäjärjestelmää, mikä ei takaa pakettien vastaanottamista siinä järjestyksessä kuin ne on lähetetty. Viestien toimitusmääräystakuiden puuttuminen mahdollistaa pakettikytkentäjärjestelmän puskuroida paketteja, käyttää useita polkuja pakettien lähettämiseen, lähettää vaurioituneita paketteja uudelleen ja käyttää muita optimointitekniikoita.

Näyttelijät voivat esimerkiksi käyttää viestinkäsittelyputkia. Tämä tarkoittaa, että sanoman M1 käsittelyprosessissa toimija voi vaihdella käyttäytymistä, jota käytetään seuraavan viestin käsittelyyn. Tämä tarkoittaa erityisesti, että se voi aloittaa yhden viestin M2 käsittelyn ennen kuin käsittely M1 on valmis . Se, että toimijalle on myönnetty oikeus käyttää sanomankäsittelyputkea, ei tarkoita, että sen on käytettävä kyseistä liukuhihnaa. Se, lähetetäänkö viesti putkeen vai ei, on teknisen kompromissin asia. Mistä ulkopuolinen tarkkailija voi tietää, että näyttelijän viestien käsittely on mennyt putkeen? Ei ole epäselvyyttä siitä, kuinka toimija käyttää liukuhihnatoimintoa tässä suhteessa. Vain jos tietyssä toteutuksessa liukuhihna-optimoinnin toteutus tehdään väärin, voi tapahtua jotain muuta kuin odotettua toimintaa.

Paikkakunta

Toinen tärkeä toimijamallin ominaisuus on paikallisuus: viestiä käsitellessään toimija voi lähettää viestejä vain viestistä vastaanottamiinsa osoitteisiin, osoitteisiin, jotka hänellä oli jo ennen viestin vastaanottamista sekä osoitteisiin, jotka hän on luonut käsitellessään viestiä. viesti.

Paikallisuus tarkoittaa myös sitä, että useita osoitemuutoksia ei voi tapahtua samanaikaisesti. Tässä suhteessa toimijamalli eroaa joistakin muista samanaikaisuusmalleista, kuten Petri-verkoista , joissa toteutuksia voidaan samanaikaisesti poistaa useista paikoista ja sijoittaa eri osoitteisiin.

Toimijajärjestelmien kokoonpano

Ajatus näyttelijäjärjestelmien kokoamisesta suurempiin kokonaisuuksiin on tärkeä osa modulaarisuutta, joka kehitettiin Gool Ag :n tohtorintutkinnossa .

Käyttäytyminen

Toimijamallin tärkein innovaatio oli käyttäytymiskäsitteen käyttöönotto, joka määritellään matemaattiseksi funktioksi, joka ilmaisee toimijan toimia hänen käsiteltäessä viestejä, mukaan lukien uuden käyttäytymisen määrittely seuraavan saapuvan viestin käsittelyä varten. Käyttäytyminen tarjoaa rinnakkaisuuden matemaattisen mallin toiminnan.

Käyttäytyminen myös vapauttaa toimijamallin toteutusyksityiskohdista, kuten esimerkiksi Smalltalk-72:ssa säietulkkimerkki tekee. On kuitenkin tärkeää ymmärtää, että toimijamallin kuvaamien järjestelmien tehokas toteutus vaatii pitkälle kehitettyä optimointia.

Muiden rinnakkaisten järjestelmien simulointi

Muita samanaikaisuusjärjestelmiä (kuten prosessilaskentaa ) voidaan mallintaa toimijamallissa käyttämällä kaksivaiheista toimitusprotokollaa [19] .

Laskennallinen esityslause

Toimijamallissa on suljetuille järjestelmille laskennallinen esityslause siinä mielessä, että ne eivät vastaanota viestejä ulkopuolelta. Matemaattisessa merkinnässä suljettu järjestelmä, jota merkitään S , rakennetaan parhaaksi approksimaatioksi alkukäyttäytymiselle, nimeltään ⊥ S , käyttämällä S:lle rakennettua approksimoivaa progression S käyttäytymisfunktiota seuraavasti (Hewittin 2008 julkaisun mukaan):

Merkitse S ≡ ⊔ i∈ω progressio S i (⊥ S )

Siten S voidaan matemaattisesti luonnehtia sen kaikkien mahdollisten käyttäytymistensä suhteen (mukaan lukien rajoittamattoman epädeterminismin huomioon ottaminen). Vaikka Denote S ei ole S:n toteutus , sitä voidaan käyttää todistamaan Church-Turingin teesin [20] seuraava yleistys : jos suljetun toimijajärjestelmän toimijaprimitiivi on tehokas, niin sen mahdolliset tuotokset ovat rekursiivisesti numeroituvia. Todistus seuraa suoraan laskennallisen esitystavan lauseesta.

Suhde matemaattiseen logiikkaan

Näyttelijämallin kehityksellä on mielenkiintoinen yhteys matemaattiseen logiikkaan. Yksi keskeisistä motiiveista sen kehittämiseen oli tarve hallita Planner - ohjelmointikielen kehittämisen aikana esiin tulleita näkökohtia . Kun näyttelijämalli alun perin muotoiltiin, tuli tärkeäksi määrittää mallin voima suhteessa Robert Kowalskin väitöskirjaan, jonka mukaan "laskelmat voidaan ryhmitellä päätelmien avulla". Kowalskin väitöskirja osoittautui vääräksi näyttelijämallin samanaikaisissa laskelmissa. Tämä tulos on edelleen kiistanalainen ja ristiriidassa joidenkin aikaisempien näkemysten kanssa, koska Kowalskin väitöskirja pätee peräkkäisten laskelmien ja jopa jonkinlaisten rinnakkaisten laskelmien, esimerkiksi lambda-laskujen, osalta.

Siitä huolimatta logiikkaohjelmointia on yritetty laajentaa rinnakkaislaskentaan. Kuitenkin Hewitt ja Aga väittävät vuoden 1999 artikkelissa, että tuloksena oleva järjestelmä ei ole deduktiivinen seuraavassa mielessä: rinnakkaisten logiikkaohjelmointijärjestelmien laskentavaiheet eivät seuraa deduktiivisesti aiempia vaiheita.

Siirto

Migraatio näyttelijämallissa on näyttelijän kykyä vaihtaa sijaintiaan. Esimerkiksi Aki Yonezawa mallinsi väitöskirjassaan postipalvelua, johon asiakastoimijat voivat astua sisään, vaihtaa paikkaa juosten ja poistua. Näyttelijä, joka voisi siirtyä, mallinnettiin näyttelijäksi, jolla on tietty sijainti, joka muuttuu näyttelijän siirtyessä. Tämän simulaation luotettavuus on kuitenkin kiistanalainen ja on tutkimuksen kohteena.

Turvallisuus

Näyttelijät voidaan turvata jollakin seuraavista tavoista:

Näyttelijän osoitesynteesi

Hienovarainen kohta näyttelijämallissa on kyky syntetisoida näyttelijän osoite. Joissakin tapauksissa turvajärjestelmä voi estää osoitteiden synteesin. Koska näyttelijän osoite on vain pieni merkkijono, se on luonnollisesti mahdollista syntetisoida, vaikka jos bittijono on tarpeeksi pitkä, on näyttelijän osoitteen löytäminen melko vaikeaa tai jopa mahdotonta. SOAP käyttää päätepisteosoitteena URL -osoitetta , jossa toimija sijaitsee . Koska URL -osoite on merkkijono, se on luonnollisesti mahdollista syntetisoida, vaikka salausta käytettäessä merkkijonon poimiminen on lähes mahdotonta.

Toimijan osoitesynteesi mallinnetaan yleensä kartoituksella. Ajatuksena on käyttää näyttelijäjärjestelmää kartoittamaan toimijoiden todelliset osoitteet. Esimerkiksi tietokoneen muistirakenne voidaan mallintaa toimijoiden järjestelmäksi, joka antaa kartoituksen. SOAP - osoitteiden tapauksessa tämä on DNS - mallinnus ja URL - kartoitus .

Ero muista samanaikaisista viestinmalleista

Robin Milnerin ensimmäinen julkaistu samanaikaisuutta käsittelevä työ [21] oli huomattava siitä, että se ei perustunut peräkkäiseen prosessien koostumukseen, mikä erosi toimijamallista, koska se perustui kiinteään määrään prosesseja, kiinteään määrään linkkejä rivitopologiassa, jota käytettiin synkronoi linkin. Anthony Hoaren [22] julkaisema alkuperäinen Cooperating Serial Processes (CSP) -malli eroaa toimijamallista, koska se perustuu kiinteään topologiaan linkitettyjen peräkkäisten prosessien rinnakkaiseen koostumukseen ja kommunikoimaan käyttämällä synkronista prosessiin perustuvaa viestinvälitystä. nimet. CSP:n myöhemmät versiot ovat siirtyneet pois prosessinimiin perustuvasta viestinnästä ja omaksuneet anonyymin viestinnän periaatteen. Tätä lähestymistapaa käytetään myös Milnerin työssä kommunikaatiojärjestelmien laskennasta ja pi-laskusta .

Molemmilla näillä Milnerin ja Hoaren varhaisilla malleilla on rajoitettu epädeterminismi. Vuorovaikutteisten järjestelmien nykyaikaiset teoreettiset mallit [23] tarjoavat suoraan rajattoman epädeterminismin.

Relevanssi

Neljäkymmentä vuotta Mooren lain julkaisemisen jälkeen sirun suorituskyvyn jatkuva kasvu johtuu paikallisen ja maailmanlaajuisen massiivisen rinnakkaisuuden menetelmistä. Paikallista rinnakkaisuutta käytetään uusissa siruissa 64-bittisille moniytimisille mikroprosessoreille, monisirumoduuleissa ja korkean suorituskyvyn tietoliikennejärjestelmissä. Globaali samanaikaisuus on tällä hetkellä käytössä uusissa langallisen ja langattoman laajakaistan pakettikytkentälaitteistoissa. Tallennuskapasiteetti kasvaa eksponentiaalisesti sekä paikallisen että globaalin rinnakkaisuuden vuoksi.

Malli on tarkoitettu ratkaisemaan seuraavat tietokonejärjestelmien rakentamisen ongelmat:

Monia toimijamalleissa esitellyistä ideoista käytetään nyt samoista syistä myös moniagenttijärjestelmissä [ 24] . Keskeinen ero on, että järjestelmän agentti (useimmissa määritelmissä) asettaa toimijoille lisärajoituksia, jotka tyypillisesti edellyttävät sitoutumista ja tavoitteita.

Toimijamallia käytetään myös pilvilaskenta -asiakkaissa [25] .

Ohjelmointi näyttelijöiden kanssa

Varhaiset ohjelmointikielet näyttelijätuella sisältävät Act 1, 2 ja 3 [26] [27] , Acttalk [28] , Ani [29] , Cantor [30] , Rosette [31]

Uudemmat näyttelijämallipohjaiset kielet: Actor-Based Concurrent Language (ABCL), ActorScript, AmbientTalk [32] , Axum [33] . Yleiskäyttöisiä ohjelmointikieliä, jotka käyttävät näyttelijän käsitettä, ovat E , Elixir [34] , Erlang , Io , SALSA [35] , Scala [36] [37] .

Näyttelijöitä sisältäviä kirjastoja ja taulukkorakenteita on kehitetty tarjoamaan näyttelijämäinen ohjelmointityyli kielillä, joissa ei ole sisäänrakennettuja näyttelijöitä.

Kirjastot ja taulukkorakenteet näyttelijöiden kanssa
Nimi Viimeinen julkaisupäivä Lisenssi Ohjelmointikielet
ActiveJava 2008 ? Java
Näyttelijä 31.5.2013 MIT Java
Näyttelijä-CPP 10.3.2012 [38] GPL 2.0 C++
Näyttelijäkehys 13.11.2013 Apache 2.0 .NETTO
NäyttelijäKit 13.9.2011 [39] BSD Tavoite-C
Akka 23.4.2015 Apache 2.0 Java ja Scala
Akka.NET 18.1.2016 Apache 2.0 .NETTO
C++ Actor Framework (CAF) 25.11.2015 [40] Boost Software License 1.0 ja BSD 3-Clause C++11
Selluloidi 19.1.2016 [41] MIT rubiini
Pilvi Haskell 17.6.2015 [42] BSD Haskell
PilviI 24.12.2015 [43] BSD C/C++, Elixir/Erlang/LFE, Java, Javascript, Perl, PHP, Python, Ruby
Toimiva Java 15.2.2016 [44] BSD Java
GPars 9.5.2014 [45] Apache 2.0 Groovy
jetlang 30.5.2013 [46] UusiBSD Java
Korus 2010-02-04 GPL 3 Java
[ 47 ] 13.10.2011 [48] MIT Java
LabVIEW Actor Framework 1.3.2012 [49] ? LabVIEW
libprocess 19.6.2013 Apache 2.0 C++
NAct 28.2.2012 LGPL 3.0 .NETTO
OOSMOS 17.2.2016 [50] GPL 2.0 ja kaupallinen C, C++
Rata 16.2.2016 [51] UusiBSD Java
Orleans 4.6.2019 [52] MIT .NETTO
Panini 22.5.2014 MPL 1.1 Oma ohjelmointikieli
Peerneettinen 29.6.2007 LGPL 3.0 Java
PostSharp 24.9.2014 Kaupallinen / Freemium .NETTO
Pulsar 24.11.2016 [53] UusiBSD Python
Pulsar 18.2.2016 [54] LGPL / Eclipse Clojure
Pykka 28.5.2022 [55] Apache 2.0 Python
React.Net ? MIT .NETTO
Retlang 18.5.2011 [56] UusiBSD .NETTO
roottori 23.5.2022 MIT C++17
S4 31.7.2012 [57] Apache 2.0 Java
SOobjektiaattori 2016-02-11 UusiBSD C++11
Termiittijärjestelmä 21.5.2009 LGPL Kaavio
Theron 18.1.2014 [58] M.I.T. [59] C++
näyttelijä 11.9.2019 [60] GoDaddyn julkinen julkaisu [61] Python
QP 29.9.2015 [62] GPL 2.0 ja kaupallinen C ja C++
Kvasaari 18.1.2016 [63] LGPL / Eclipse Java

Muistiinpanot

  1. Carl Hewitt, Peter Bishop, Richard Steiger: Universaali modulaarinen näyttelijäformalismi tekoälylle. IJCAI , 1973 
  2. 1 2 3 William Klinger, Näyttelijäsemantiikan perusteet. MIT PhD matematiikassa kesäkuu 1981 Arkistoitu 25. heinäkuuta 2019 Wayback Machinessa 
  3. [Irene Greif, Kommunikatiivisten rinnakkaisten prosessien semantiikka. MIT, PhD, elokuu 1975  ]
  4. 1 2 G. Aga, I. Mason, S. Smith, C. Talcott. Syitä näyttelijöiden laskemiseen. Journal of Functional Programming, tammikuu  1993
  5. G. Baker, C. Hewitt. Vuorovaikutteisten rinnakkaisten prosessien lait. IFIP, elokuu 1977 
  6. Carl Hewitt. Mikä on velvoite? Fyysinen, organisatorinen ja sosiaalinen. Arkistoitu 11. helmikuuta 2021 Wayback Machinessa 
  7. 1 2 Gul Agha, Näyttelijät: Rinnakkaislaskentamalli hajautetuissa järjestelmissä. MIT Press, PhD, 1986 Arkistoitu 4. kesäkuuta 2011 Wayback Machinessa 
  8. M. Gaspari, G. Zavattaro. Näyttelijöiden algebra. Tekninen raportti UBLCS-97-4. Bolognan yliopisto, 1997
  9. G. Agha, P. Thati. Algebrallinen näyttelijöiden teoria ja sen soveltaminen yksinkertaiseen oliopohjaiseen kieleen. (linkki ei saatavilla) . Haettu 14. helmikuuta 2011. Arkistoitu alkuperäisestä 20. huhtikuuta 2004. 
  10. John Darlington; YK Guo. Toimijoiden formalisointi lineaarisessa logiikassa  (määrittelemätön) . - Kansainvälinen oliotietojärjestelmien konferenssi, 1994.
  11. Carl Hewitt. Ohjausrakenteiden katseleminen viestien välitysmalleina Journal of Artificial Intelligence. kesäkuuta 1977
  12. SmallTalk Runtime nykyaikaisena toteutusesimerkkinä (Pharo-projektisivusto) . Haettu 31. lokakuuta 2018. Arkistoitu alkuperäisestä 7. kesäkuuta 2017.
  13. P. Hansen. Rinnakkaisohjelmoinnin alkuperä: semaforeista etäproseduurikutsuihin. Springer , 2002 
  14. Per Hansen, Monitors and Concurrent Pascal: A Personal History , Comm. ACM 1996, s. 121-172
  15. Hansen, P., Operating System Principles , Prentice-Hall, heinäkuu 1973.
  16. CAR Hoare, näytöt: käyttöjärjestelmän rakennekonsepti , Comm. ACM Voi. 17, ei. 10. lokakuuta 1974, s. 549-557
  17. [McCarthy ja Hayes 1969]
  18. 1 2 [Dijkstra 1976]
  19. Frederick Knabe. Hajautettu protokolla kanavapohjaista viestintää varten Choice PARLEn kanssa 1992.
  20. Kleene, 1943
  21. Robin Milner. Prosessit: Laskentaagenttien matemaattinen malli logiikkakollokviumissa 1973.
  22. AUTO Hoare. Kommunikoida peräkkäisiä prosesseja elokuuta 1978
  23. [Hoare 1985], [Roscoe 2005]
  24. Hewitt, 2006b, 2007b
  25. Carl Hewitt. Skaalautuvien, luotettavien ja luottamuksellisten asiakkaiden organisointi pilvilaskentaa varten. IEEE Internet Computing, v. 12 (5), 2008  (englanniksi)
  26. Henry Lieberman. Review Act 1. MIT AI, kesäkuu 1981  (linkki ei saatavilla  )
  27. Henry Lieberman. Monien asioiden ajatteleminen kerralla ilman hämmennystä: Concurrency in Act 1. MIT AI, kesäkuu 1981  (linkki ei ole käytettävissä  )
  28. Jean-Pierre Briot. Acttalk: Runko oliosuuntautuneelle samanaikaiselle ohjelmointi-suunnittelulle ja kokemukselle 2. Ranska-Japani -työpaja. 1999.
  29. Ken Kahn. Animaation laskennallinen teoria MIT EECS:n väitöskirja. elokuuta 1979
  30. William Athas ja Nanette Boden Cantor: Näyttelijäohjelmointijärjestelmä tieteellistä laskemista varten NSF-työpajan työpajassa oliopohjaisesta rinnakkaisohjelmoinnista. 1988. SIGPLAN-ilmoitusten erikoisnumero.
  31. Darrell Woelk. InfoSleuth-agenttien kehittäminen ruusukkeen avulla: näyttelijäpohjainen kielijulkaisu CIKM '95 -työpajasta älykkäistä tietoagenteista. 1995.
  32. Dedecker J., Van Cutsem T., Mostinckx S., D'Hondt T., De Meuter W. Ambient-oriented Programming in AmbientTalk. Teoksessa “Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP), Dave Thomas (Toim.), Lecture Notes in Computer Science, Voi. 4067, s. 230-254, Springer-Verlag., 2006
  33. Microsoft valmistaa uutta rinnakkaisohjelmointikieltä - Sovelluskehitys - Uutiset ja arvostelut - eWeek.com
  34. Dave Thomas. Luku 14. Työskentely useiden prosessien kanssa // Ohjelmointi Elixir. - Pragmaattinen kirjahylly, 2014. - 280 s. — ISBN 978-1-937785-58-1 .
  35. Carlos Varela ja Gul Agha. Dynaamisesti uudelleenkonfiguroitavien avoimien järjestelmien ohjelmointi SALSA:lla. ACM SIGPLAN -ilmoitukset. OOPSLA'2001 Intriguing Technology Track Proceedings, 2001
  36. Philipp Haller ja Martin Odersky, Tapahtumapohjainen ohjelmointi ilman ohjauksen inversiota, Proc. JMLC, syyskuu, 2006 . Haettu 14. helmikuuta 2011. Arkistoitu alkuperäisestä 9. marraskuuta 2020.
  37. Philipp Haller ja Martin Odersky, näyttelijät, jotka yhdistävät säikeitä ja tapahtumia. Tekninen raportti LAMP, tammikuu, 2007 (kuollut linkki) . Haettu 14. helmikuuta 2011. Arkistoitu alkuperäisestä 7. kesäkuuta 2011. 
  38. Muutokset - actor-cpp - C++:n toimijamallin toteutus - Google Project Hosting . code.google.com. Käyttöpäivä: 25. helmikuuta 2016. Arkistoitu alkuperäisestä 18. marraskuuta 2015.
  39. Commit History stevedekorte/ActorKit GitHub . Github.com. Haettu: 25.2.2016.
  40. Tunnisteet actor-framework/actor-framework GitHub . Github.com. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 20. marraskuuta 2020.
  41. selluloidi | RubyGems.org | yhteisösi helmiisäntäsi . rubygems.org. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 29. syyskuuta 2020.
  42. Cloud Haskell: Erlang-tyylinen samanaikainen ja hajautettu ohjelmointi Haskellissa . Github.com. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 3. maaliskuuta 2016.
  43. CloudI Dowanloads . sourceforge.net. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 14. maaliskuuta 2016.
  44. Toiminnalliset Java-julkaisut . GitHub. Haettu: 25. helmikuuta 2016.  (linkki ei saatavilla)
  45. GPars-julkaisut . GitHub. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 4. syyskuuta 2020.
  46. jetlang-lataukset . code.google.com. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 12. maaliskuuta 2016.
  47. Srinivasan, Sriram; Alan Mycroft (2008). "Kilim: Eristystyyppiset näyttelijät Javalle" (PDF) . European Conference on Object Oriented Programming ECOOP 2008 . Kypros. Arkistoitu (PDF) alkuperäisestä 28.10.2020 . Haettu 25.2.2016 . Käytöstä poistettu parametri |deadlink=( ohje )
  48. Toimitushistoria kilim/kilim GitHub . Github.com. Käyttöpäivä: 25. helmikuuta 2016. Arkistoitu alkuperäisestä 27. huhtikuuta 2010.
  49. Yhteisö: Actor Framework, LV 2011 -versio (versio 3.0.7) . decibel.ni.com. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 13. lokakuuta 2016.
  50. OOSMOS-versiohistoria (downlink) . OOSMOS. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 10. maaliskuuta 2016. 
  51. Orbit, GitHub, tag 0.7.1 -julkaisu . GitHub. Haettu: 25. helmikuuta 2016.  (linkki ei saatavilla)
  52. Orleans, GitHub, tag 2.3.4 -julkaisu . GitHub. Haettu 4. kesäkuuta 2019. Arkistoitu alkuperäisestä 4. joulukuuta 2020.
  53. Pulsarin julkaisutiedot . Haettu 17. tammikuuta 2019. Arkistoitu alkuperäisestä 17. tammikuuta 2019.
  54. Pulsar GitHubissa . Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 17. marraskuuta 2020.
  55. Muutokset - Pykka v3.1.1 . pykka.org. Käyttöönottopäivä: 26.8.2022.
  56. Muutokset - retlang - Viestipohjainen samanaikaisuus .NET - Google Project Hostingissa . code.google.com. Käyttöpäivä: 25. helmikuuta 2016. Arkistoitu alkuperäisestä 24. marraskuuta 2015.
  57. Toimitushistoria s4/s4 Apache (downlink) . apache.org. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 6. maaliskuuta 2016. 
  58. Theron - Versio 6.00.02 julkaistu (downlink) . Theron-library.com. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 16. maaliskuuta 2016. 
  59. Theron (downlink) . Theron-library.com. Käyttöpäivä: 25. helmikuuta 2016. Arkistoitu alkuperäisestä 4. maaliskuuta 2016. 
  60. Thespian-julkaisuhistoria PyPI:ssä . Haettu 27. tammikuuta 2020. Arkistoitu alkuperäisestä 1. toukokuuta 2019.
  61. Thespian julkaisut . godaddy.com Haettu 29. syyskuuta 2015. Arkistoitu alkuperäisestä 30. marraskuuta 2018.
  62. QP Active Object Frameworks - Selaa tiedostoja osoitteessa . sourceforge.net. Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 24. helmikuuta 2021.
  63. Quasar GitHub . Haettu 25. helmikuuta 2016. Arkistoitu alkuperäisestä 15. joulukuuta 2020.

Kirjallisuus