Яка різниця між Актором Акки та моделлю Актора Скали


76

Я виявив, що існує також модель актора Акка, тому мені цікаво, в чому різниця між Актором Акки та Актором Скали?



1
Актори Scala зараз застаріли на користь акторів Akka, так навіщо турбуватися? :) goo.gl/VaPOu
Джан Марко

Починаючи Scala 2.10, scala.actorsбібліотека застаріла на користь акторів Акки.
Джонні

Відповіді:


59

Ну немає. Існує просто модель актора, і актори Akka та актори Scala є двома реалізаціями цієї моделі.

Модель All Actor говорить, що ваші примітиви одночасності є акторами, які можуть:

  • отримати повідомлення та вирішити, що робити далі залежно від змісту повідомлення, включаючи:

  • надсилати повідомлення будь-яким дійовим особам, про яких вони знають

  • створювати нових акторів

та надає певні гарантії, наприклад:

  • будь-який актор одночасно обробляє лише одне повідомлення

  • повідомлення, надіслані актором X актору Y, надходитимуть у тому порядку, в якому вони були відправлені

На цьому рівні між акторами Скали та Акки немає різниці.

Відмінності в тому, що вони можуть зробити, див. В Огляді різних реалізацій акторів Scala . Найбільшим для мене є те, що Akka підтримує керівників та ActorRegistry.


6
Порівняльний PDF-файл, на який посилається прийнята відповідь, здається, більше недоступний. Ось порівняння одного з розробників Akka: akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Френк

7
Ваше посилання теж 404. Наразі це працює: doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Джан Марко

32

Є також історична відповідь. Творці Scala вважали, що мають існувати акторські рамки. Йонас Бонер спробував це, але не був повністю задоволений, тому він почав працювати над новим - який перетворився на Акку. Однак люди Scala вважали, що це краще, ніж їх власний - тому на Jfokus 2011 вони оголосили, що Akka має стати стандартним актором Scala. Однак ця міграція займе певний час.


2
Так, бібліотека Scala Actors уже застаріла у версії 2.11 docs.scala-lang.org/overviews/core/actors-migration-guide.html
anshumans

7

Це трохи залежить від того, що ви маєте на увазі під "моделлю" - ви можете звернутися або до "моделі виконання", або "моделі програмування" (і, можливо, також інших моделей).

Для моделей виконання їх існує в основному два: на основі потоків або подій. Стандартна бібліотека акторів Scala містить і те, і інше. На основі потоків використовується один потік для кожного актора, тоді як на основі подій використовується пул потоків. Перший більш інтуїтивно зрозумілий, другий - більш ефективний. Akka побудована на основі подійної моделі.

Для моделі програмування існує велика різниця між стандартною бібліотекою Scala та Akka. У стандартній бібліотеці Scala ви в основному реалізуєте метод "запустити" - і якщо ви хочете дочекатися вхідного повідомлення, ви потрапите в стан очікування (викликавши "отримати" або "реагувати"). Отже, модель програмування наслідує "метафору потоку". Однак в Akka метафора програмування полягає в тому, що ви реалізуєте кілька методів життєвого циклу, але метод "run" записаний всередині фреймворку. Насправді виявляється, що ця модель програмування працює набагато краще і з моделлю виконання на основі подій.

Якщо ви зацікавлені в різних моделях виконання і програмування моделей SCALA стандартних акторів я написав кілька повідомлень з цього питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.