Я виявив, що існує також модель актора Акка, тому мені цікаво, в чому різниця між Актором Акки та Актором Скали?
Scala 2.10
, scala.actors
бібліотека застаріла на користь акторів Акки.
Я виявив, що існує також модель актора Акка, тому мені цікаво, в чому різниця між Актором Акки та Актором Скали?
Scala 2.10
, scala.actors
бібліотека застаріла на користь акторів Акки.
Відповіді:
Ну немає. Існує просто модель актора, і актори Akka та актори Scala є двома реалізаціями цієї моделі.
Модель All Actor говорить, що ваші примітиви одночасності є акторами, які можуть:
отримати повідомлення та вирішити, що робити далі залежно від змісту повідомлення, включаючи:
надсилати повідомлення будь-яким дійовим особам, про яких вони знають
створювати нових акторів
та надає певні гарантії, наприклад:
будь-який актор одночасно обробляє лише одне повідомлення
повідомлення, надіслані актором X актору Y, надходитимуть у тому порядку, в якому вони були відправлені
На цьому рівні між акторами Скали та Акки немає різниці.
Відмінності в тому, що вони можуть зробити, див. В Огляді різних реалізацій акторів Scala . Найбільшим для мене є те, що Akka підтримує керівників та ActorRegistry.
Є також історична відповідь. Творці Scala вважали, що мають існувати акторські рамки. Йонас Бонер спробував це, але не був повністю задоволений, тому він почав працювати над новим - який перетворився на Акку. Однак люди Scala вважали, що це краще, ніж їх власний - тому на Jfokus 2011 вони оголосили, що Akka має стати стандартним актором Scala. Однак ця міграція займе певний час.
Це трохи залежить від того, що ви маєте на увазі під "моделлю" - ви можете звернутися або до "моделі виконання", або "моделі програмування" (і, можливо, також інших моделей).
Для моделей виконання їх існує в основному два: на основі потоків або подій. Стандартна бібліотека акторів Scala містить і те, і інше. На основі потоків використовується один потік для кожного актора, тоді як на основі подій використовується пул потоків. Перший більш інтуїтивно зрозумілий, другий - більш ефективний. Akka побудована на основі подійної моделі.
Для моделі програмування існує велика різниця між стандартною бібліотекою Scala та Akka. У стандартній бібліотеці Scala ви в основному реалізуєте метод "запустити" - і якщо ви хочете дочекатися вхідного повідомлення, ви потрапите в стан очікування (викликавши "отримати" або "реагувати"). Отже, модель програмування наслідує "метафору потоку". Однак в Akka метафора програмування полягає в тому, що ви реалізуєте кілька методів життєвого циклу, але метод "run" записаний всередині фреймворку. Насправді виявляється, що ця модель програмування працює набагато краще і з моделлю виконання на основі подій.
Якщо ви зацікавлені в різних моделях виконання і програмування моделей SCALA стандартних акторів я написав кілька повідомлень з цього питання.