Кіріспе

Бір мезгілде есептеу моделі

Компьютерлік ғылымдағы актерлік модель – бір мезгілде есептеудің негізгі құрылыс бөлігі ретінде актерді қарастыратын, бір мезгілде есептеудің математикалық моделі. Алған хабарламаға жауап ретінде актер жергілікті шешімдер қабылдай алады, жаңа актерлер құра алады, қосымша хабарламалар жібере алады және келесі хабарламаға қалай жауап беру керектігін анықтай алады. Актерлер өздерінің жеке жай-күйлерін өзгерте алады, бірақ бір-біріне тек хабарламалар арқылы ғана жанама түрде әсер ете алады (бұғаттау негізіндегі синхронизация қажеттілігін жояды). Актерлік модель 1973 жылы пайда болған. Ол есептеуді теориялық тұрғыдан түсіну үшін де, бірнеше практикалық параллель жүйелерді жүзеге асыру үшін де теориялық негіз ретінде қолданылған. Модельдің басқа жұмыстармен байланысы актерлік модель және процесс есептеуі тақырыбында талқыланады.

Тарих

Карл Хьюиттің айтуынша, бұрынғы есептеу модельдерінен өзгеше, актерлік модель физикадан, соның ішінде жалпы салыстырмалылық теориясы мен кванттық механикадан шабыт алған. Оған сондай-ақ Lisp, Simula, Smalltalk-тың алғашқы нұсқалары, мүмкіндіктерге негізделген жүйелер және пакеттік коммутация бағдарламалау тілдері де әсер еткен. Оның дамуына "әрқайсысы өз локалды жадысымен және байланыс процессорларымен жабдықталған, ондаған, жүздеген, тіпті мыңдаған тәуелсіз микропроцессорлардан тұратын, жоғары өнімді байланыс желісі арқылы байланысатын, өте параллель есептеу машиналарын құру мүмкіндігі" ықпал етті. Одан бері көп ядролы және көп процессорлы компьютерлік архитектуралардың пайда болуы актерлік модельге деген қызығушылықты қайта жандандырды. Хьюит, Бишоп және Штайгердің 1973 жылғы жарияланымнан кейін Айрин Грайф өзінің докторлық зерттеуінің аясында актерлік модельдің операциялық семантикасын жасады. Екі жыл өткен соң Генри Бейкер мен Хьюитт актерлік жүйелерге арналған аксиоматикалық заңдар жинағын жариялады. Басқа маңызды кезеңдерге 1981 жылы Уильям Клингердің күш домендеріне негізделген денотациялық семантиканы енгізген диссертациясы кіреді. Бұл актерлік модель теориясының толыққанды дамуына әкелді. Массачусетс технология институтының (MIT) "Хабар алмасу семантикасы" тобында Рас Аткинсон, Джузеппе Аттарди, Генри Бейкер, Джерри Барбер, Питер Бишоп, Питер де Йонг, Кен Кан, Генри Либерман, Карл Маннинг, Том Рейнхардт, Ричард Штайгер және Дэн Терио бағдарламалық жасақтаманы іске асыру бойынша маңызды жұмыстар атқарды. Калифорния технология институтында (Caltech) Чак Сейтц және MIT-де Билл Далли басқаратын зерттеу топтары модельдегі хабар алмасуды одан әрі дамытатын компьютерлік архитектураларды құрды. Актерлік модельді іске асыру туралы көріңіз. Актерлік модель бойынша зерттеулер Калифорния технология институтында, Киото университетінің Токоро зертханасында, Микроэлектроника және компьютерлік технологиялар корпорациясында (MCC), MIT жасанды интеллект зертханасында, SRI, Стэнфорд университетінде, Иллинойс университетінде, Пьер және Мари Кюри университетінде (Париж университеті 6), Пиза университетінде, Токио университетінің Йонезава зертханасында, Centrum Wiskunde & Informatica (CWI) және басқа да орындарда жүргізілді.

Қолданбалар

Актерлік модель бір мезгілде жұмыс істейтін жүйелердің кең ауқымын модельдеу, түсіну және талдау үшін негіз ретінде қолданылуы мүмкін. Мысалы:

Электрондық поштаны (email) актерлік жүйе ретінде модельдеуге болады. Акаунттар актерлер ретінде, ал электрондық пошта мекенжайлары актерлердің мекенжайлары ретінде моделіңделеді. Веб-қызметтерді Simple Object Access Protocol (SOAP) нүктелері актерлердің мекенжайлары ретінде моделіңделетін актерлер ретінде модельдеуге болады. Құлыптары бар объектілер (мысалы, Java және C# тілдерінде) олардың іске асырылуы хабарламалардың үнемі келіп түсуіне мүмкіндік беретін болса (мысалы, ішкі кезекке сақталған жағдайда) сериализатор ретінде модельденуі мүмкін. Сериализатор – жаңа хабарламалардың келуіне үнемі қолжетімді болатын қасиетімен анықталатын актердің маңызды түрі; сериализаторға жіберілген әрбір хабарламаның келуі кепілдендіріледі. Тестілеу және Тестілеу Бақылау Нотациясы (TTCN), TTCN 2 және TTCN 3 актерлік модельге өте жақын. TTCN-де актер – бұл тестілеу компоненті: параллель тестілеу компоненті (PTC) немесе негізгі тестілеу компоненті (MTC). Тестілеу компоненттері қашықтағы серіктестерге (тестілеу компоненттерінің өзара әрекеттесушілері немесе тестілеу жүйесі интерфейсі) хабарлар жібере және алады, соңғысы оның мекенжайымен анықталады. Әрбір тестілеу компонентіне мінез-құлық ағашы байланыстырылған; тестілеу компоненттері қатар жұмыс істейді және оларды ата-аналық тестілеу компоненттері динамикалық түрде құруы мүмкін. Тілдегі құрылымдық элементтер ішкі хабар кезегінен күтілетін хабар алынған кезде, басқа өзара әрекеттесуші субъектіге хабар жіберу немесе жаңа тестілеу компоненттерін жасау сияқты әрекеттерді анықтауға мүмкіндік береді.

Хабарды беру семантикасы

Актерлік модель – хабар алмасудың мағынасын анықтау туралы.

Шексіз нондетерминизм дау-дамай

Бірінші қатарлас бағдарламалар үзіліс жарналары болған. Компьютердің қалыпты жұмыс істеу барысында ол сырттан ақпаратты (пернетақтадан келген символдар, желіден келген пакеттер және т.б.) қабылдауға қабілетті болуы керек. Ақпарат келген кезде компьютердің орындалуы үзіліп, арнайы код (үзіліс жарнасы деп аталады) ақпаратты кейіннен алуға болатын деректер буферіне орналастыру үшін шақырылды. 1960 жылдардың басында үзілістер бір процессорда бірнеше бағдарламаның бір мезгілде орындалуын симуляциялау үшін қолданыла бастады. Ортақ жадпен қатарлылық бір мезгілді басқару мәселесін тудырды. Бастапқыда бұл мәселе бір компьютерде өзара теке-қарсылық ретінде қарастырылды. Эдсгер Дайкстра семафорларды, ал кейіннен 1971 және 1973 жылдар аралығында Тони Хоар және Пер Бринч Хансен өзара теке-қарсылық мәселесін шешу үшін мониторларды жасады. Алайда, бұл шешімдердің ешқайсысы ортақ ресурстарға қол жеткізуді қамтитын бағдарламалау тілі құрылымын ұсынбады. Бұл капсулация кейіннен сериализатор конструкциясымен орындалды ([Hewitt and Atkinson 1977, 1979] және [Atkinson 1980]). Есептеудің алғашқы модельдері (мысалы, Тьюринг машиналары, Пост-өндірістер, Ламбда-есептеуі және т.б.) математикаға негізделген және есептеу қадамын көрсету үшін жаһандық күйді қолданды (кейін [Маккарти мен Хейз 1969] және [Дикстра 1976] оқиғалардың жаһандық күйге қарсы ретін қараңыз). Әрбір есептеу қадамы есептеудің бір жаһандық күйінен келесі жаһандық күйге дейін. Жаһандық күйге қатысты көзқарас автоматтар теориясында шекті күй машиналары мен стек машиналарын, олардың нондетерминистік нұсқаларын қоса алғанда, төменге қарай итеріп отыру үшін жалғастырылды. Мұндай нондетерминистік автоматтардың шектелген нондетерминизм қасиеттері бар; яғни, егер машина бастапқы күйінде басталғанда әрқашан тоқтаса, онда ол тоқтаған күйлердің санына шек қойылады. Эдсгер Дайкстра бұдан әрі нондетерминистік жаһандық күй әдісін дамытты. Дикстраның моделі шексіз нондетерминизмге (сонымен қатар шексіз белгісіздік деп аталады) қатысты дау тудырды, бұл қатарлылықтың қасиеті, ол арқылы сұрауды қызмет көрсетудегі кешіктіру мөлшері ортақ ресурстар үшін даудың төрелігі нәтижесінде шексіз бола алады, сонымен бірге сұраудың ақырында қызмет етілуіне кепілдік береді. Хьюитт актерлік модель қызмет көрсетуді қамтамасыз етуі тиіс деп мәлімдеді. Дикстраның моделі бойынша, компьютерде реттік нұсқауларды орындау арасында шексіз уақыт болуы мүмкін болса да, жақсы анықталған күйде басталған (паралельді) бағдарлама тек шектелген сандағы күйде аяқталуы мүмкін [Dijkstra 1976]. Нәтижесінде оның моделі қызмет көрсетуді қамтамасыз ете алмады. Дикстра шексіз нондетерминизмді жүзеге асыру мүмкін емес деп дәлелдеді. Хьюитт басқаша пікір білдірді: арбитр деп аталатын есептеу тізбегінің қанша уақытқа дейін орнығуы үшін шектеу қоюға болмайды (метастабильділік (электрониканы) қараңыз). Арбитрлер компьютерлерде компьютерлік сағаттар сырттан келген, мысалы, пернетақтадан, дискіге, желіге және т.б. кіретін мәліметтерге қатысты асинхронды жұмыс істейтін жағдайда қолданылады. Осылайша, компьютерге жіберілген хабарды қабылдау үшін шексіз уақыт қажет болуы мүмкін және сол уақытта компьютер шексіз сандағы күйлерді аралай алады. Актерлік модель домен теориясын пайдалана отырып, Уилл Клингердің математикалық моделіне түсірілген шексіз нондетерминизміне ие.

Есептеулік бейнелеу теоремасы

Актерлік модельде сыртқы байланыстарды қабылдамайтын жабық жүйелер үшін есептеулік бейнелеу теоремасы бар. Жабық жүйе деп белгіленетін математикалық тұжырымдама бастапқы мінез-құлықтан және мінез-құлықты жуықтау функциясынан құралады. Олар үнемі жақсырақ жуықтамалар алады және төмендегідей белгіленуін (мағынасын) құрастырады [Хьюит 2008; Клингер 1981]:

Осылайша, жүйенің барлық мүмкін мінез-құлықтары (шексіз нондетерминизмді қамтитын) тұрғысынан математикалық сипаттама беруге болады. жүйенің іске асырылуы болмаса да, оны Church-Turing-Rosser-Kleene тезисінің жалпыламасын дәлелдеу үшін пайдалануға болады [Kleene 1943]:

Жоғарыдағы теореманың салдары – шекті актер әртүрлі шығыстармен нондетерминистік түрде жауап бере алады.

Логикалық бағдарламалаумен байланыс

Актерлік модельді әзірлеудің негізгі себептерінің бірі – Планер бағдарламалау тілін әзірлеу кезінде туындаған басқару құрылымы мәселелерін түсіну және оларды шешу болды. Актерлік модель бастапқыда анықталғаннан кейін, маңызды міндет – модельдің күшін Роберт Ковальскидің «есептеуді дедукция арқылы түсіндіруге болады» деген тезисіне қатысты түсіну болды. Хьюит Ковальскидің тезисі актерлік модельдегі бір мезгілдегі есептеулер үшін жалған болып шықты деп дәлелдеді (Бір мезгілдегі есептеудегі белгісіздік туралы қараңыз). Дегенмен, логикалық бағдарламалауды бір мезгілдегі есептеулерге кеңейтуге әрекеттер жасалды. Алайда, Хьюит және Аға [1991] нәтижесіндегі жүйелер келесі мағынада дедуктивті емес екенін мәлімдеді: бір мезгілдегі логикалық бағдарламалау жүйелерінің есептеу қадамдары алдыңғы қадамдардан дедуктивті түрде туындамайды (Бір мезгілдегі есептеудегі белгісіздік туралы қараңыз). Соңғы уақытта логикалық бағдарламалау логикалық семантиканы сақтайтын тәсілмен актерлік модельге енгізілді. Бұл модель бірізді процестерді құрастыруға негізделмегендігімен де ерекшеленді. Оның жұмысы актерлік модельден өзгеше болды, себебі ол синхронды байланыс арқылы сандар мен жолдарды алмасатын, белгілі бір топологиядағы белгілі бір саны бар процестерге негізделген. Тони Хоар жариялаған бастапқы байланысты үдерістер (CSP) моделі актерлік модельден өзгеше болды, өйткені ол белгілі бір топологияда байланысқан үдерістердің белгілі бір санының қатарлы құрамына негізделген және үдерістердің аттарына сүйенген синхронды хабар алмасу арқылы байланыс жасады (Актерлік модель және процесс калькуляторларының тарихын қараңыз). CSP-нің кейінгі нұсқалары процестердің аттарына негізделген байланысты каналдар арқылы анонимді байланыс пайдасына тастады, бұл тәсіл Милнердің байланыс калькулі және π калькулі бойынша жұмысында да қолданылды. Милнер мен Хоардың ертедегі модельдерінің екеуі де шектеулі нон-детерминизм қасиетіне ие болды. Қазіргі заманғы теориялық CSP ([Hoare 1985] және [Roscoe 2005]) нақты шексіз нон-детерминизмді ұсынады. Петри желілері және олардың кеңейтімдері (мысалы, түсті Петри желілері) актерлер сияқты асинхронды хабар алмасуға және шексіз нон-детерминизмге негізделген, ал бастапқы CSP сияқты элементарлық өңдеу қадамдарының (көшулер) және хабарлама сақтау орындарының (орналары) белгілі бір топологиясын анықтайды.

Ықпал

Актерлік модель теориялық дамуға да, практикалық бағдарламалық жасақтаманы әзірлеуге де зор әсер етті.

Теория

Актерлік модель π-калькулының және одан кейінгі процесс калькулының дамуына ықпал етті. Робин Милнер өзінің Тьюринг лекциясында былай деп жазды: "Таза лямбда-калькулы тек екі түрлі нәрседен тұрады: терминдер мен айнымалылар. Біз осыған ұқсас қарапайымдылықты процесс калькулында қол жеткізе аламыз ба? Карл Хьюитт актерлік моделімен бұл қиындыққа бұрыннан-ақ жауап берді; ол мән, мәндерге қатысты оператор және процесс – бәрінің бір түрлі нәрсе болуы керек деді: актер. Бұл мақсат маған ұнады, себебі ол біртектілік пен толыққанды өрнектеуді білдіреді. Бірақ алгебралық калькулы арқылы осы мақсатқа қалай қол жеткізуге болатынын мен көп уақыттан кейін ғана түсіндім. Сондықтан, Хьюиттің рухымен, біздің алғашқы қадамымыз – терминдермен белгіленген немесе атаулармен қол жеткізілетін барлық нәрсе – мәндер, тіркегіштер, операторлар, процестер, объектілер – бәрінің бір түрлі нәрсе болуын талап ету: олардың бәрі процестер болуы керек."

Практика

Актерлік модель коммерциялық тәжірибеге зор әсер етті. Мысалы, Twitter масштабталу үшін актерлерді пайдаланған. Сондай-ақ, Microsoft өзінің Асинхронды агенттер кітапханасын жасау кезінде актерлік модельді қолданды. Төмендегі актерлік кітапханалар мен фреймворктер бөлімінде одан да көп актерлік кітапханалар тізімделген.

Актерлермен бірге бағдарламалау

Бірнеше түрлі бағдарламалау тілдері актерлік модельді немесе оның бірнеше нұсқаларын қолданады. Осы тілдердің қатарында:

Актерлік кітапханалар мен жүйелер

Актерлік кітапханалар немесе фреймворктер актерлік стильде бағдарламалауды актерлер енгізілмеген тілдерде жүзеге асыру үшін де жасалған. Осы фреймворктердің кейбіреулері:

Атауы | Күйде | Соңғы шығарылымы | Лицензия | Тілдер
---|---|---|---|---
Otavia | 2024 01 02 | Apache 2.0 | Scala
Abstractor | 2024 03 04 | Apache 2.0 | Java
Xcraft Goblins | 2022 08 30 | MIT | JavaScript
ReActed | 2022 11 30 | Apache 2.0 | Java
Acteur | 2020 04 16 | Apache 2.0 / MIT | Rust
Bastion | 2020 08 12 | Apache 2.0 / MIT | Rust
Actix | 2020 09 11 | MIT | Rust
Aojet | 2016 10 17 | MIT | Swift
Actor | 2017 03 09 | MIT | Java
Actor4j | 2020 01 31 | Apache 2.0 | Java
Actr | 2019 04 09 | Apache 2.0 | Java
Vert.x | 2018 02 13 | Apache 2.0 | Java, Groovy, Javascript, Ruby, Scala, Kotlin, Ceylon
ActorFx | 2013 11 13 | Apache 2.0 | .NET
Akka (құралдар жиынтығы) | 2022 09 06 | Коммерциялық (2.7.0 нұсқасынан бастап, 2.6.20 нұсқасына дейін Apache 2.0) | Java және Scala
Akka.NET | 2020 08 20 | Apache 2.0 | .NET
Apache Pekko | 2023 07 26 | Apache 2.0 | Java және Scala
Dapr | 2019 10 16 | Apache 2.0 | Java, .NET Core, Go, Javascript, Python, Rust және C++
DOTNETACTORS | 2021 06 14 | MIT | .NET, C#, Azure қызметтік шинасы
Remact | 2016 06 26 | MIT | .NET, Javascript
Ateji PX | ? | ? | Java
czmq | 2016 11 10 | MPL 2 | C, F#
Пошта жәшігі процессор | F# сияқты (негізгі кітапханада енгізілген) | Apache License | F#
Korus | 2010 02 04 | GPL 3 | Java
Kilim | 2018 11 09 | MIT | Java
ActorFoundry (Kilim негізінде) | 2008 12 28 | ? | Java
Skynet | 2020 12 10 | MIT | C/Lua
Reactors.IO | 2016 06 14 | BSD | Java/Scala
libagents | 2020 03 08 | Free software license | C++11
Proto.Actor | 2021 01 05 | Free software license | Go, C#, Python, JavaScript, Kotlin
FunctionalJava | 2018 08 18 | BSD 3 Clause | Java
Riker | 2019 01 04 | MIT | Rust
Comedy | 2019 03 09 | EPL 1.0 | JavaScript
VLINGO XOOM Actors | 2023 02 15 | Mozilla Public License 2.0 | Java, Kotlin, JVM тілдері, C# .NET
wasmCloud | 2021 03 23 | Apache 2.0 | WebAssembly (Rust, TinyGo, Zig, AssemblyScript)
ray | 2020 08 27 | Apache 2.0 | Python
cell | 2012 08 02 | New BSD License | Python
go actor | 2022 08 16 | GPL 3.0 | Go
Sento | 2022 11 21 | Apache 2.0 | Common Lisp
Tarant | 2023 04 17 | MIT | Typescript, Javascript
Cloud Haskell | 2024 04 30 | BSD | Haskell
CloudI | 2023 10 27 | MIT | ATS, C/C++, Elixir/Erlang/LFE, Go, Haskell, Java, Javascript, OCaml, Perl, PHP, Python, Ruby, Rust
Clutter | 2017 05 12 | LGPL 2.1 | C, C++ (cluttermm), Python (pyclutter), Perl (perl Clutter)
NAct | 2012 02 28 | LGPL 3.0 | .NET
Nact | 2018 06 06 | Apache 2.0 | JavaScript/ReasonML
Retlang | 2011 05 18 | New BSD | .NET
JActor | 2013 01 22 | LGPL | Java
Jetlang | 2013 05 30 | New BSD | Java
Haskell Actor | 2008 | New BSD | Haskell
GPars | 2014 05 09 | Apache 2.0 | Groovy
OOSMOS | 2019 05 09 | GPL 2.0 және коммерциялық (қос лицензиялау) | C, C++ сүйіспеншілікпен
Panini | 2014 05 22 | MPL 1.1 | Програмдау тілі өзі
PARLEY | 2007 22 07 | GPL 2.1 | Python
Peernetic | 2007 06 29 | LGPL 3.0 | Java
Picos | 2020 02 04 | MIT | KRL
PostSharp | 2014 09 24 | Commercial / Freemium | .NET
Pulsar | 2016 07 09 | New BSD | Python
Pulsar | 2016 02 18 | LGPL/Eclipse | Clojure
Pykka | 2019 05 07 | Apache 2.0 | Python
Termite Scheme | 2009 05 21 | LGPL | Scheme (Gambit нұсқасы)
Theron | 2014 01 18 | MIT | C++
Thespian | 2020 03 10 | MIT | Python
Quasar | 2018 11 02 | LGPL/Eclipse | Java
Libactor | 2009 | GPL 2.0 | C
Actor CPP | 2012 03 10 | GPL 2.0 | C++
S4 | 2012 07 31 | Apache 2.0 | Java, C++
Actor Framework (CAF) | 2020 02 08 | Boost Software License 1.0 және BSD 3 Clause | C++11
Celluloid | 2018 12 20 | MIT | Ruby
LabVIEW Actor Framework | 2012 03 01 | National Instruments SLA | LabVIEW
LabVIEW Messenger Library | 2021 05 24 | BSD | LabVIEW
Orbit | 2019 05 28 | New BSD | Java
QP frameworks for real time embedded systems | 2019 05 25 | GPL 2.0 және коммерциялық (қос лицензиялау) | C және C++
libprocess | 2013 06 19 | Apache 2.0 | C++
SObjectizer | 2021 12 28 | New BSD | C++17
rotor | 2022 04 23 | MIT License | C++17
Orleans | 2023 07 11 | MIT License | C#/.NET