Skådespelare modell

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 6 juli 2020; kontroller kräver 11 redigeringar .

Skådespelarmodellen  är en matematisk modell av parallell beräkning , byggd kring begreppet en skådespelare ( eng.  skådespelare  "aktör; agerande subjekt"), som anses vara en universell primitiv för parallellt utförande. En aktör i denna modell interagerar genom att utbyta meddelanden med andra aktörer, och var och en som svar på mottagna meddelanden kan fatta lokala beslut, skapa nya aktörer, skicka sina egna meddelanden och bestämma hur de ska svara på efterföljande meddelanden.

Skapat som en teoretisk grund för ett antal praktiska implementeringar av parallella system .

Historik

Huvudidéerna och grunden för modellen lades fast 1973 genom publiceringen av Hewitt, Bishop och Steiger [1] . Programmeringsspråken Lisp , Simula och tidiga versioner av Smalltalk , såväl som metoder för parametriskt skydd och paketväxling , påverkade processen för modellbildning . Den främsta motivationen för att skapa modellen var uppgiften att bygga distribuerade datorsystem baserade på hundratals och tusentals oberoende datorer utrustade med sina egna lokala minne och kommunikationsgränssnitt [2] . Med tillkomsten av multiprocessorsystem och multi-core arkitekturer ökade intresset för aktörsmodellen även utanför sammanhanget av distribuerade system.

1975 utvecklades operativ semantik för skådespelaremodellen [3] [4] . 1977 utvecklades ett system av axiomatiska lagar för skådespelaremodeller [5] . 1981 skapades, utvecklades och generaliserades den denotationssemantik av modellen (semantik av övergångar) [2] [6] 1985 [7] ; som ett resultat av dessa arbeten erkänns teorin om skådespelarmodeller som utvecklad och utvecklad.

På 1990-talet skapades formalismer som inte helt överensstämmer med aktörsmodellen (formaliserar inte garanterad meddelandeleverans), men som är av praktiskt intresse, i synnerhet flera olika aktörsalgebror [8] [9] och tolkning baserad på linjär logik [10] .

Grundläggande begrepp

I analogi med filosofin om objektorienterad programmering , där varje primitiv betraktas som ett objekt, pekar skådespelarens modell ut begreppet "aktör" som en universell enhet. En aktör är en beräkningsenhet som, som svar på ett mottaget meddelande, samtidigt kan:

Det antas inte att det finns en specifik sekvens av ovanstående åtgärder och de kan alla utföras parallellt.

Separationen av avsändaren från de skickade meddelandena var en grundläggande prestation av aktörsmodellen: den ger asynkron kommunikation och kontroll av strukturer i form av meddelandeförmedling [11] .

Mottagare av meddelanden identifieras med en adress, ibland kallad "postadress". En aktör kan alltså bara interagera med de aktörer vars adresser den har, kan extrahera adresser från mottagna meddelanden eller känna till dem i förväg om skådespelaren skapat dem själv.

Modellen kännetecknas av inneboende parallellism av beräkningar inom och mellan aktörer, dynamiskt skapande av aktörer, inkludering av aktörsadresser i meddelanden och interaktion endast genom direkta asynkrona meddelanden utan några begränsningar i ordningen för ankomsten av meddelanden.

Applikationer

Aktörsmodellen kan användas som grund för modellering, förståelse och resonemang på ett brett spektrum av samtidiga system , till exempel:

Meddelande som passerar semantik

Obegränsade icke-deterministiska meningsskiljaktigheter

De första parallella programmen var kanske avbrottshanterare . Under drift måste en dator som regel svara på externa händelser som kan inträffa vid en tidigare okänd tidpunkt (asynkront med avseende på det program som körs för närvarande) - till exempel för att ta emot information utifrån (tecken från tangentbordet) , paket från nätverket och så vidare ). Den mest effektiva hanteringen av sådana händelser genomförs med hjälp av så kallade avbrott. När en händelse inträffar "avbryts exekveringen av det aktuella programmet", och avbrottshanteraren startas , som utför de åtgärder som krävs för att svara på händelsen (till exempel tar emot inkommande information och lagrar den i en buffert, varifrån den kan läsas senare), varefter huvudprogrammet fortsätter att arbeta där det slutade .

I början av 1960-talet började avbrott användas för att simulera den samtidiga exekveringen av flera program på en enda processor [13] . Förekomsten av parallellitet med delat minne har lett till problemet med samtidighetskontroll. Ursprungligen var denna uppgift tänkt som en av mutexerna på en separat dator. Edsger Dijkstra utvecklade semaforer , och senare, mellan 1971 och 1973, utvecklades monitorer [14] [15] [16] av Charles Hoare och Per Hansen för att lösa mutexproblemet . Ingen av dessa lösningar skapade dock konstruktioner i programmeringsspråk som skulle inkapsla tillgång till delade resurser. Inkapsling gjordes senare av Hewitt och Atkinson med användning av serialiseringskonstruktioner ([Hewitt, Atkinson 1977, 1979] och [Atkinson 1980]).

De första beräkningsmodellerna (t.ex. Turing -maskin , Post-maskin , lambda-kalkyl, etc.) baserades på matematik och använde begreppet en global stat för att definiera "beräkningssteget" (senare generaliserades dessa begrepp i verk av McCarthy och Dijkstra [17] [18] ). Varje beräkningssteg gick från ett globalt beräkningstillstånd till nästa. Den globala tillståndsstrategin har fortsatt inom automatteorin för finita automater och stackmaskiner, inklusive deras icke- deterministiska versioner. Sådana icke-deterministiska automater har egenskapen begränsad icke-determinism. Det vill säga, om maskinen alltid står innan den går till initialtillståndet, så finns det en gräns för antalet tillstånd som den kan vara i.

Dijkstra utvecklade den icke-deterministiska globala statsansatsen vidare. Dijkstras modell har gett upphov till kontroverser om obegränsad icke-determinism, en egenskap hos parallell beräkning där mängden latens vid betjäning av en begäran kan bli obegränsad till följd av arbitragekonkurrens om delade resurser, samtidigt som den garanterar att begäran så småningom kommer att bli servad. Hewitt menade att aktörsmodellen borde ge garantier för tillhandahållandet av en tjänst. Även om det i Dijkstras modell inte kan gå en obegränsad tid mellan exekveringen av sekventiella operationer på en dator, kan ett program som körs parallellt, som började sitt arbete i ett strikt definierat tillstånd, bara avbrytas i ett begränsat antal tillstånd [18 ] . Därför kan Dijkstras modell inte ge garantier för tillhandahållandet av en tjänst. Dijkstra hävdade att det var omöjligt att implementera obegränsad icke-determinism.

Hewitt hävdade något annat: det finns ingen gräns för den tid som ägnas åt arbetet med den sektion av beräkningar, som kallas skiljemannen för att lösa konflikter. Skiljemän hanterar lösningen av sådana situationer. Datorklockan fungerar asynkront med externa ingångar: tangentbordsingång, diskåtkomst, nätverksingång och så vidare. Så det kan ta en obegränsad tid att ta emot ett meddelande som skickas till en dator, och under den tiden kan datorn gå igenom ett obegränsat antal tillstånd.

Obegränsad icke-determinism är ett karakteristiskt drag i skådespelarmodellen, som använder sig av Klingers matematiska modell baserad på teorin om regioner [2] . Det finns ingen global stat i skådespelarmodellen.

Direkt kommunikation och asynkron

Meddelanden i skådespelarmodellen är inte nödvändigtvis buffrade. Detta är dess skarpa skillnad från tidigare metoder för simultanberäkningsmodellen. Bristen på buffring orsakade många missförstånd under utvecklingen av skådespelaremodellen, och är fortfarande föremål för kontroverser än i dag. Vissa forskare hävdar att meddelanden buffras i "luften" eller "miljön". Dessutom skickas meddelanden i aktörsmodellen helt enkelt (till exempel paket i IP ). Det finns inget krav på ett synkront handslag med mottagaren.

Att skapa nya aktörer och skicka adresser i meddelanden innebär en föränderlig topologi

En naturlig utveckling av skådespelarmodellen var förmågan att skicka adresser i meddelanden. Påverkad av paketkopplade nätverk, föreslog Hewitt att utveckla en ny modell för samtidig datoranvändning där länken inte skulle ha några obligatoriska fält alls, som alla kunde vara tomma. Om avsändaren av meddelandet önskar att mottagaren ska få tillgång till adresser som han inte redan har, ska adressen skickas i meddelandet.

Under beräkningen kan det bli nödvändigt att skicka ett meddelande till en mottagare från vilken ett svar senare ska tas emot. Sättet att göra detta är att skicka ett meddelande som innehåller adressen till en annan aktör, kallat ett CV (kallas ibland även en fortsättning eller samtalsstack ). Mottagaren kan sedan skapa ett svarsmeddelande som ska skickas vid CV .

Skapandet av aktörer plus införandet av deltagaradresser i meddelanden gör att aktörsmodellen har en potentiellt variabel topologi i sin relation till varandra, liknande objekt i Simula-språket som också har en variabel topologi i sin relation till varandra.

I huvudsak samtidigt

I motsats till det tidigare tillvägagångssättet baserat på att kombinera sekventiella processer, utformades aktörsmodellen som en simultan modell i sin essens. Som skrivet i teorin om skådespelaremodeller är sekvensen i den ett specialfall som härrör från samtidiga beräkningar.

Inga krav för meddelandeordning

Hewitt var emot att inkludera krav på att meddelanden måste komma fram i den ordning de skickades till skådespelarens modell. Om man önskar beställa inkommande meddelanden kan detta modelleras med en aktörskö som ger denna funktionalitet. Sådana aktörsköer skulle ordna inkommande meddelanden så att de tas emot i FIFO - ordning . I allmänhet, om en aktör X sänder ett meddelande Ml till en aktör Y , och sedan samma aktör X sänder ett annat meddelande M2 ​​till Y , så finns det inget krav på att M1 anländer till Y före M2 .

I detta avseende speglar aktörsmodellen paketväxlingssystemet, vilket inte garanterar att paketen kommer att tas emot i den ordning de skickades. Bristen på garantier för meddelandeleveransorder tillåter paketväxlingssystemet att buffra paket, använda flera sökvägar för att skicka paket, skicka om skadade paket och använda andra optimeringstekniker.

Till exempel kan aktörer använda en pipeline för meddelandebehandling. Detta betyder att aktören under behandlingen av meddelande M1 kan variera beteendet som kommer att användas för att behandla nästa meddelande. I synnerhet betyder detta att den kan börja bearbeta ytterligare ett meddelande M2 ​​innan bearbetningen av M1 är klar . Bara för att en aktör beviljas rätt att använda en pipeline för meddelandebehandling betyder det inte att den måste använda den pipeline. Huruvida ett meddelande kommer att skickas i pipeline eller inte är en fråga om teknisk kompromiss. Hur kan en utomstående observatör veta att en aktörs meddelandebehandling har gått igenom pipelinen? Det finns ingen tvetydighet om en aktörs användning av pipelining-kapaciteten i detta avseende. Endast om, i en viss implementering, implementeringen av pipelined optimering görs felaktigt, kan något annat än det förväntade beteendet inträffa.

Ort

En annan viktig egenskap hos aktörsmodellen är lokalitet: när en aktör bearbetar ett meddelande kan en aktör bara skicka meddelanden till de adresser den fick från meddelandet, till de adresser den redan hade innan den tog emot meddelandet och till de adresser den skapade under bearbetningen av meddelandet. meddelande.

Lokalitet innebär också att flera adressändringar inte kan ske samtidigt. I detta avseende skiljer sig aktörsmodellen från vissa andra samtidighetsmodeller, såsom Petrinets , där implementeringar samtidigt kan tas bort från flera positioner och placeras på olika adresser.

Sammansättning av aktörssystem

Idén att komponera system av skådespelare till större enheter är en viktig aspekt av modularitet, som utvecklades i Gool Ags doktorsexamen .

Beteende

Den främsta innovationen i aktörsmodellen var introduktionen av begreppet beteende, definierat som en matematisk funktion som uttrycker en aktörs handlingar när den bearbetar meddelanden, inklusive definitionen av ett nytt beteende för att bearbeta nästa inkommande meddelande. Beteendet ger funktionen hos den matematiska modellen för parallellism.

Beteendet frigör också aktörsmodellen från implementeringsdetaljer, som till exempel i Smalltalk-72, trådtolkningsmarkören gör. Det är dock viktigt att förstå att en effektiv implementering av de system som beskrivs av aktörsmodellen kräver avancerad optimering.

Simulering av andra parallella system

Andra system för samtidighet (som processkalkyl ) kan modelleras i aktörsmodellen med hjälp av tvåfasprotokollet [19] .

Computational representation theorem

I aktörsmodellen finns ett beräkningsrepresentationsteorem för slutna system, i den meningen att de inte tar emot meddelanden utifrån. I matematisk notation är ett slutet system, betecknat som S , byggt som den bästa approximationen för det initiala beteendet, kallat ⊥ S , med hjälp av en approximativ progressionsfunktion för S -beteende byggd för S enligt följande (enligt Hewitts 2008-publikation):

Beteckna S ≡ ⊔ i∈ω progression S i (⊥ S )

Således kan S matematiskt karakteriseras i termer av alla dess möjliga beteenden (inklusive att ta hänsyn till obegränsad icke-determinism). Även om Denote S inte är en implementering av S , kan den användas för att bevisa följande generalisering av Church-Turing-tesen [20] : om en aktör som är primitiv i ett slutet system av aktörer är effektiv, så är dess möjliga utdata rekursivt uppräknade. Beviset följer direkt av beräkningsrepresentationssatsen.

Samband med matematisk logik

Utvecklingen av skådespelaremodellen har ett intressant samband med matematisk logik. En av de viktigaste motiven för dess utveckling var behovet av att hantera aspekter som uppstod under utvecklingen av programmeringsspråket Planner . När skådespelarmodellen ursprungligen formulerades blev det viktigt att fastställa modellens kraft i förhållande till Robert Kowalskis tes att "beräkningar kan grupperas efter slutsatser." Kowalskis tes visade sig vara falsk för samtidiga beräkningar i skådespelarmodellen. Detta resultat är fortfarande diskutabelt och motsäger vissa tidigare idéer, eftersom Kowalskis avhandling är sann för sekventiella beräkningar och även för vissa typer av parallella beräkningar, till exempel för lambda-kalkyler.

Ändå har försök gjorts att utvidga logisk programmering till samtidig beräkning. Emellertid hävdar Hewitt och Aga i en artikel från 1999 att det resulterande systemet inte är deduktivt i följande mening: beräkningsstegen i parallella logiska programmeringssystem följer inte deduktivt från tidigare steg.

Migrering

Migration i aktörsmodellen är en aktörs förmåga att byta plats. Till exempel modellerade Aki Yonezawa i sin avhandling en posttjänst där klientaktörer kunde gå in, byta plats medan de sprang och lämna. En aktör som kunde migrera modellerades som en aktör med en specifik plats som förändras när skådespelaren migrerar. Men tillförlitligheten av denna simulering är kontroversiell och är föremål för forskning.

Säkerhet

Skådespelare kan säkras på något av följande sätt:

Skådespelarens adresssyntes

En subtil punkt i skådespelarens modell är förmågan att syntetisera adressen till en skådespelare. I vissa fall kan säkerhetssystemet förbjuda syntesen av adresser. Eftersom adressen till en skådespelare bara är en bitsträng är det uppenbarligen möjligt att syntetisera den, men om bitsträngen är tillräckligt lång är det ganska svårt eller till och med omöjligt att hitta skådespelarens adress. SOAP använder URL :en där skådespelaren finns som slutpunktsadress . Eftersom URL : en är en sträng av tecken är det uppenbarligen möjligt att syntetisera den, men om kryptering tillämpas är det nästan omöjligt att plocka upp strängen.

Aktöradresssyntes modelleras vanligtvis med en kartläggning. Tanken är att använda aktörssystemet för att kartlägga till skådespelarnas faktiska adresser. Till exempel kan en dators minnesstruktur modelleras som ett system av aktörer som ger en kartläggning. När det gäller SOAP- adresser är detta DNS- modellering och URL - mappning .

Skillnad från andra modeller för samtidiga meddelanden

Robin Milners första publicerade arbete om samtidighet [21] var anmärkningsvärt för att inte vara baserat på sekventiell processsammansättning, skiljer sig från skådespelarmodellen eftersom det var baserat på ett fast antal processer, ett fast antal länkar i radtopologin som användes för att synkronisera länken. Den ursprungliga Cooperating Serial Processes (CSP)-modellen publicerad av Anthony Hoare [22] skiljer sig från aktörsmodellen eftersom den är baserad på den parallella sammansättningen av ett fast antal sekventiella processer länkade i en fast topologi och kommunicerar med hjälp av synkron meddelandeöverföring baserat på process namn. Senare versioner av CSP har gått bort från kommunikation baserad på processnamn och antagit principen om anonym kommunikation över rör. Detta tillvägagångssätt används också i Milners arbete med calculus of communicating systems och pi-calculus .

Båda dessa tidiga modeller av Milner och Hoare har begränsad icke-determinism. Moderna teoretiska modeller av interagerande system [23] ger direkt obegränsad icke-determinism.

Relevans

Fyrtio år efter publiceringen av Moores lag beror den fortsatta ökningen av chipprestanda på metoder för lokal och global massiv parallellism. Lokal parallellism används i nya chips för 64-bitars flerkärniga mikroprocessorer, i multi-chip moduler och i högpresterande kommunikationssystem. Global samtidighet är för närvarande aktiverad i ny trådbunden och trådlös bredbandspaketväxlingshårdvara . Lagringskapaciteten på grund av både lokal och global parallellitet växer exponentiellt.

Modellen syftar till att lösa följande problem med att bygga datorsystem:

Många av idéerna som introducerats i skådespelarmodeller används nu också i multiagentsystem av samma skäl [24] . Den viktigaste skillnaden är att systemets agent (i de flesta definitioner) lägger ytterligare restriktioner på aktörerna, vilket vanligtvis kräver att de använder åtaganden och mål.

Aktörsmodellen används även i cloud computing- klienter [25] .

Programmering med skådespelare

Tidiga programmeringsspråk med skådespelarestöd inkluderar Akt 1, 2 och 3 [26] [27] , Acttalk [28] , Ani [29] , Cantor [30] , Rosette [31]

Nyare skådespelarmodellorienterade språk: Actor-Based Concurrent Language (ABCL), ActorScript, AmbientTalk [32] , Axum [33] . Allmänt använda programmeringsspråk som använder begreppet skådespelare inkluderar E , Elixir [34] , Erlang , Io , SALSA [35] , Scala [36] [37] .

Bibliotek och tabellstrukturer med skådespelare har utvecklats för att ge en skådespelareliknande programmeringsstil på språk som inte har inbyggda skådespelare.

Bibliotek och bordsstrukturer med skådespelare
namn Senaste releasedatum Licens Programmeringsspråk
ActiveJava 2008 ? Java
Skådespelare 2013-05-31 MIT Java
Skådespelare-CPP 2012-03-10 [38] GPL 2.0 C++
Skådespelare Framework 2013-11-13 Apache 2.0 .NETTO
ActorKit 2011-09-13 [39] BSD Mål-C
Akka 2015-04-23 Apache 2.0 Java och Scala
Akka.NET 2016-01-18 Apache 2.0 .NETTO
C++ Actor Framework (CAF) 2015-11-25 [40] Boost Software License 1.0 och BSD 3-klausul C++11
Celluloid 2016-01-19 [41] MIT rubin
Cloud Haskell 2015-06-17 [42] BSD Haskell
CloudI 2015-12-24 [43] BSD C/C++, Elixir/Erlang/LFE, Java, Javascript, Perl, PHP, Python, Ruby
Funktionell Java 2016-02-15 [44] BSD Java
GPars 2014-05-09 [45] Apache 2.0 Häftig
jetlang 2013-05-30 [46] NewBSD Java
Korus 2010-02-04 GPL 3 Java
[ 47 ] 2011-10-13 [48] MIT Java
LabVIEW Actor Framework 2012-03-01 [49] ? LabVIEW
libprocess 2013-06-19 Apache 2.0 C++
NAct 2012-02-28 LGPL 3.0 .NETTO
OOSMOS 2016-02-17 [50] GPL 2.0 och kommersiella C, C++
Bana 2016-02-16 [51] NewBSD Java
Orleans 2019-06-04 [52] MIT .NETTO
Panini 2014-05-22 MPL 1.1 Eget programmeringsspråk
Peernetisk 2007-06-29 LGPL 3.0 Java
PostSharp 2014-09-24 Kommersiell / Freemium .NETTO
Pulsar 2016-11-24 [53] NewBSD Pytonorm
Pulsar 2016-02-18 [54] LGPL / Eclipse Clojure
Pykka 2022-05-28 [55] Apache 2.0 Pytonorm
React.Net ? MIT .NETTO
Retlang 2011-05-18 [56] NewBSD .NETTO
rotor 2022-05-23 MIT C++17
S4 2012-07-31 [57] Apache 2.0 Java
SObjectizer 2016-02-11 NewBSD C++11
Termitschema 2009-05-21 LGPL Schema
Theron 2014-01-18 [58] M.I.T. [59] C++
Thespian 2019-09-11 [60] GoDaddy Public Release [61] Pytonorm
QP 2015-09-29 [62] GPL 2.0 och kommersiella C och C++
kvasar 2016-01-18 [63] LGPL / Eclipse Java

Anteckningar

  1. Carl Hewitt, Peter Bishop, Richard Steiger: En universell modulär skådespelareformalism för artificiell intelligens. IJCAI , 1973 
  2. 1 2 3 William Klinger, Fundamentals of Actor Semantics. MIT PhD in Mathematics juni 1981 Arkiverad 25 juli 2019 på Wayback Machine 
  3. [Irene Greif, Kommunikativa parallella processers semantik. MIT, PhD, augusti 1975  ]
  4. 1 2 G. Aga, I. Mason, S. Smith, C. Talcott. Skäl för att beräkna skådespelare. Journal of Functional Programming, januari  1993
  5. G. Baker, C. Hewitt. Lagar för interagerande parallella processer. IFIP, augusti 1977 
  6. Carl Hewitt. Vad är en skyldighet? Fysiskt, organisatoriskt och socialt. Arkiverad 11 februari 2021 på Wayback Machine 
  7. 1 2 Gul Agha, skådespelare: Modell av parallell beräkning i distribuerade system. MIT Press, PhD, 1986 Arkiverad 4 juni 2011 på Wayback Machine 
  8. M. Gaspari, G. Zavattaro. En algebra av skådespelare. Teknisk rapport UBLCS-97-4. Universitetet i Bologna, 1997
  9. G. Agha, P. Thati. En algebraisk teori om skådespelare och dess tillämpning på ett enkelt objektbaserat språk. (inte tillgänglig länk) . Hämtad 14 februari 2011. Arkiverad från originalet 20 april 2004. 
  10. John Darlington; YK Guo. Formaliserande aktörer i linjär logik  (obestämd) . - Internationell konferens om objektorienterade informationssystem, 1994.
  11. Carl Hewitt. Visa kontrollstrukturer som mönster för att skicka meddelanden Journal of Artificial Intelligence. juni 1977
  12. SmallTalk Runtime som ett modernt implementeringsexempel (Pharo-projektets webbplats) . Hämtad 31 oktober 2018. Arkiverad från originalet 7 juni 2017.
  13. P. Hansen. Ursprunget till parallell programmering: från semaforer till fjärranrop. Springer , 2002 
  14. Per Hansen, Monitors and Concurrent Pascal: A Personal History , Comm. ACM 1996, sid. 121-172
  15. Hansen, P., Operativsystemprinciper , Prentice-Hall, juli 1973.
  16. CAR Hoare, Monitors: An Operating System Structuring Concept , Comm. ACM Vol. 17, nr. 10 oktober 1974, sid. 549-557
  17. [McCarthy och Hayes 1969]
  18. 1 2 [Dijkstra 1976]
  19. Frederick Knabe. Ett distribuerat protokoll för kanalbaserad kommunikation med valmöjligheter PARLE 1992.
  20. Kleene, 1943
  21. Robin Milner. Processer: A Mathematical Model of Computing Agents in Logic Colloquium 1973.
  22. BIL Hoare. Kommunicera sekventiella processer augusti 1978
  23. [Hoare 1985], [Roscoe 2005]
  24. Hewitt, 2006b, 2007b
  25. Carl Hewitt. Organisation av skalbara, pålitliga, konfidentiella klienter för cloud computing. IEEE Internet Computing, v. 12 (5), 2008  (engelska)
  26. Henry Lieberman. Review Act 1. MIT AI, juni 1981  (länk ej tillgänglig  )
  27. Henry Lieberman. Att tänka många saker samtidigt utan förvirring: Samtidighet i akt 1. MIT AI, juni 1981  (länk ej tillgänglig  )
  28. Jean-Pierre Briot. Acttalk: Ett ramverk för objektorienterad samtidig programmering-design och erfarenhet 2:a Frankrike-Japan workshop. 1999.
  29. Ken Kahn. A Computational Theory of Animation MIT EECS doktorsavhandling. augusti 1979
  30. William Athas och Nanette Boden Cantor: Ett skådespelarprogrammeringssystem för vetenskaplig beräkning i samband med NSF-workshopen om objektbaserad samtidig programmering. 1988. Specialutgåva av SIGPLAN-meddelanden.
  31. Darrell Woelk. Utveckla InfoSleuth-agenter med hjälp av Rosette: An Actor Based Language Proceedings of the CIKM '95 Workshop on Intelligent Information Agents. 1995.
  32. Dedecker J., Van Cutsem T., Mostinckx S., D'Hondt T., De Meuter W. Ambient-oriented Programming in AmbientTalk. I "Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP), Dave Thomas (Ed.), Lecture Notes in Computer Science Vol. 4067, sid. 230-254, Springer-Verlag., 2006
  33. Microsoft kokar upp ett nytt parallellt programmeringsspråk - Applikationsutveckling - Nyheter & recensioner - eWeek.com
  34. Dave Thomas. Kapitel 14. Arbeta med flera processer // Programmering Elixir. - Pragmatisk bokhylla, 2014. - 280 sid. — ISBN 978-1-937785-58-1 .
  35. Carlos Varela och Gul Agha. Programmera dynamiskt omkonfigurerbara öppna system med SALSA. ACM SIGPLAN-meddelanden. OOPSLA'2001 Intriguing Technology Track Proceedings, 2001
  36. Philipp Haller och Martin Odersky, Händelsebaserad programmering utan inversion av kontroll, Proc. JMLC, september 2006 . Hämtad 14 februari 2011. Arkiverad från originalet 9 november 2020.
  37. Philipp Haller och Martin Odersky, skådespelare som förenar trådar och händelser. Teknisk rapport LAMP, januari 2007 (död länk) . Hämtad 14 februari 2011. Arkiverad från originalet 7 juni 2011. 
  38. Ändringar - actor-cpp - En implementering av aktörsmodellen för C++ - Google Project Hosting . code.google.com. Tillträdesdatum: 25 februari 2016. Arkiverad från originalet 18 november 2015.
  39. Commit History stevedekorte/ActorKit GitHub . Github.com. Hämtad: 25 februari 2016.
  40. Taggar actor-framework/actor-framework GitHub . Github.com. Hämtad 25 februari 2016. Arkiverad från originalet 20 november 2020.
  41. celluloid | RubyGems.org | din gemenskap pärla värd . rubygems.org. Hämtad 25 februari 2016. Arkiverad från originalet 29 september 2020.
  42. Cloud Haskell: Erlang-stil samtidig och distribuerad programmering i Haskell . Github.com. Hämtad 25 februari 2016. Arkiverad från originalet 3 mars 2016.
  43. CloudI-nedladdningar . sourceforge.net. Hämtad 25 februari 2016. Arkiverad från originalet 14 mars 2016.
  44. Funktionella Java-versioner . GitHub. Hämtad: 25 februari 2016.  (inte tillgänglig länk)
  45. GPars Releases . GitHub. Hämtad 25 februari 2016. Arkiverad från originalet 4 september 2020.
  46. jetlang nedladdningar . code.google.com. Hämtad 25 februari 2016. Arkiverad från originalet 12 mars 2016.
  47. Srinivasan, Sriram; Alan Mycroft (2008). "Kilim: Isolation-Typed Actors for Java" (PDF) . Europeisk konferens om objektorienterad programmering ECOOP 2008 . Cypern. Arkiverad (PDF) från originalet 2020-10-28 . Hämtad 2016-02-25 . Utfasad parameter används |deadlink=( hjälp )
  48. Begå historik kilim/kilim GitHub . Github.com. Datum för åtkomst: 25 februari 2016. Arkiverad från originalet 27 april 2010.
  49. Community: Actor Framework, LV 2011 revision (version 3.0.7) . decibel.ni.com. Hämtad 25 februari 2016. Arkiverad från originalet 13 oktober 2016.
  50. OOSMOS-versionshistorik (nedlänk) . OOSMOS. Hämtad 25 februari 2016. Arkiverad från originalet 10 mars 2016. 
  51. Orbit, GitHub, tag 0.7.1 release . GitHub. Hämtad: 25 februari 2016.  (inte tillgänglig länk)
  52. Orleans, GitHub, tag 2.3.4 release . GitHub. Hämtad 4 juni 2019. Arkiverad från originalet 4 december 2020.
  53. Pulsar Release Notes . Hämtad 17 januari 2019. Arkiverad från originalet 17 januari 2019.
  54. Pulsar på GitHub . Hämtad 25 februari 2016. Arkiverad från originalet 17 november 2020.
  55. Ändringar - Pykka v3.1.1 . pykka.org. Tillträdesdatum: 2022-26-08.
  56. Ändringar - retlang - Meddelandebaserad samtidighet i .NET - Google Project Hosting . code.google.com. Datum för åtkomst: 25 februari 2016. Arkiverad från originalet 24 november 2015.
  57. Commit History s4/s4 Apache (nedlänk) . apache.org. Hämtad 25 februari 2016. Arkiverad från originalet 6 mars 2016. 
  58. Theron - version 6.00.02 släppt (nedlänk) . Theron-library.com. Hämtad 25 februari 2016. Arkiverad från originalet 16 mars 2016. 
  59. Theron (nedlänk) . Theron-library.com. Datum för åtkomst: 25 februari 2016. Arkiverad från originalet 4 mars 2016. 
  60. Thespian releasehistorik på PyPI . Hämtad 27 januari 2020. Arkiverad från originalet 1 maj 2019.
  61. Thespian Releases . godaddy.com Hämtad 29 september 2015. Arkiverad från originalet 30 november 2018.
  62. QP Active Object Frameworks - Bläddra bland filer på . sourceforge.net. Hämtad 25 februari 2016. Arkiverad från originalet 24 februari 2021.
  63. Quasar GitHub . Hämtad 25 februari 2016. Arkiverad från originalet 15 december 2020.

Litteratur