Чи є якась реалізація моделі паралельності акторів для .net / c #?
Мені доводиться оптимізувати рутину ac #, і я думаю, що модель акторів ідеально підходить як рішення моєї проблеми. На жаль, я маю досвід лише з впровадженням Scala.
Чи є якась реалізація моделі паралельності акторів для .net / c #?
Мені доводиться оптимізувати рутину ac #, і я думаю, що модель акторів ідеально підходить як рішення моєї проблеми. На жаль, я маю досвід лише з впровадженням Scala.
Відповіді:
Ви повинні поглянути на MS Concurrency & Coordination Runtime (CCR) та Децентралізовані програмні послуги (DSS) , частину Robotic Studio .
Ці рамки дозволять вам розробляти вільно пов'язані між собою послуги, які відповідають більшості вимог щодо підходу до актора.
Axum найкраще підійде, на жаль, він все ще перебуває в якійсь альфа / бета-фазі (ОНОВЛЕННЯ, його було вбито в лютому 2011 р.) Я використовую його для своїх досліджень і повинен сказати, що загальний напрямок є великим і він має величезний потенціал.
Не C #, а C ++ - це бібліотека асинхронних агентів Microsoft, яка надає всі необхідні функції.
Уважно ознайомтеся з паралельними функціями .NET 4.
Сподіваюся, це допоможе!
https://github.com/AsynkronIT/protoactor-dotnet
https://github.com/akkadotnet/akka.net
Можна також поглянути на підхід Project Orleans Microsofts до акторів (який вийшов минулого тижня)
Це веб-сайт проектів: http://research.microsoft.com/en-us/projects/orleans/
Ось також хороша розмова від збірки 2014 як вступ
Використання Орлеана для побудови розподілених хмарних служб Halo 4 в Azure http://channel9.msdn.com/Events/Build/2014/3-641
Зверніть увагу, що біти для завантаження, опубліковані сьогодні, - це CTP.
Вступ до Орлеана: http://felixnotes.com/orleans-microsofts-take-on-the-actor-pattern-in-net/
І так, це також було відкритим кодом: https://github.com/dotnet/orleans
Актор-lib на .Net. Досить грамотно і добре перевірено. Основа TopShelf, MassTransit та NServiceBus.Host.
https://github.com/phatboyg/stact
Містить абстракції:
Майбутні:
Будучи активно розвивався на момент написання Крісом.
Розробка одночасних додатків вимагає підходу, який відрізняється від сучасних методів розробки програмного забезпечення, підходу, який підкреслює паралельність та зв'язок між автономними системними компонентами. Модель актора визначає систему програмних компонентів, які називаються акторами, які взаємодіють між собою шляхом обміну повідомленнями (замість виклику методів на інтерфейсах в об'єктно-орієнтованому дизайні), створюючи систему, в якій дані (замість контролю) проходять через компоненти для задоволення функціональні вимоги системи.
Stact - це бібліотека для побудови програм, що використовують модель актора в .NET. Основна збірка, Stact.dll, є бібліотекою акторів і включає все необхідне для використання моделі актора в будь-якому додатку. Існують також додаткові допоміжні фреймворки, такі як Stact.ServerFramework, які можна використовувати для викриття акторів через сокети або HTTP, що дозволяє будувати служби за допомогою акторів.
NAct - це структура акторів для .NET, яка застосовує дуже простий у використанні підхід. (Застереження: я це написав)
Повідомлення, що передається між двома акторами, є лише викликом методу між двома об'єктами. Ви повинні переконатися, що всі аргументи методу є незмінними, і він буде безпечним для потоків.
Це працює, обертаючи ваші об'єкти в проксі, який займається перемиканням потоків. Усі нормальні функції .NET, зокрема події, обробляються правильно, тому ви можете писати звичайний код, і маршоутворення потоків відбуватиметься самостійно.
Існує навіть гілка з підтримкою C # 5 async / await.
Сьогодні корпорація Майкрософт анонсувала Azure Service Fabric, яка відповідно до цієї картини реалізує модель програмування актора:
Див. Оголошення: http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/
Я не знаю жодної реалізації для C #, але є цілком нова мова програмування, заснована на моделі Actor від Microsoft. Це називається Axum :
Axum
(раніше називалася кодовою назвоюMaestro
) - це паралельна мова програмування, що базується на моделі Actor, розробленій корпорацією Майкрософт. Це об’єктно-орієнтована мова, заснована на середовищі виконання .NET Common Language, що використовує C-подібний синтаксис, який, будучи мовою для конкретного домену, призначений для розробки частин програмного додатку, які добре підходять для паралельності. Але він містить достатньо загальних конструкцій, що не потрібно переходити до мови програмування загального призначення (наприклад, C #) для послідовних частин паралельних компонентів.
Ви також повинні розглянути акторів PostSharp
Remact.Net - це мій поточний проект. Він використовує WebSockets та Json для обміну повідомленнями з віддаленими акторами. Він має безпеку типів для акторів C #, але також підтримує динамічні типи для акторів на основі браузера, написаних сценарієм Java.
Моїм попереднім проектом був AsyncWcfLib . Це бібліотека C # для акторів, які спілкуються в процесі або між різними програмами. Віддалене передавання повідомлень використовує WCF.
Служба каталогу акторів дозволяє виявити акторів на декількох хостах. Хости можуть працювати під управлінням Windows або Linux.
Фреймворк актора для F #.
З прикладу:
let rec schizoPing =
(fun (actor:IActor<_>) ->
let log = (actor :?> Actor.T<_>).Log
let rec ping() =
async {
let! (msg,_) = actor.Receive()
log.Info(sprintf "(%A): %A ping" actor msg, None)
return! pong()
}
and pong() =
async {
let! (msg,_) = actor.Receive()
log.Info(sprintf "(%A): %A pong" actor msg, None)
return! ping()
}
ping()
)
Надсилання двох повідомлень актору "шизо" призводить до
let schizo = Actor.spawn (Actor.Options.Create("schizo")) schizoPing
!!"schizo" <-- "Hello"
!!"schizo" <-- "Hello"
Вихід:
(schizo): "Hello" ping
(schizo): "Hello" pong
Знайдіть його на github та в документації
Просто помітив це запитання і подумав додати новішу точку даних. Наразі Microsoft має для цього напівофіційний проект, який називається ActorFX . Це з відкритим кодом і все ще розвивається, але варто стежити за ...
Як уже зазначалося, клас F # MailboxProcessor пропонує просту, зрозумілу реалізацію моделі актора. Чудовий вступ про те, як ним користуватися, доступний тут . F # дуже добре взаємодіє з C #, і ви можете обернути агент у класі методами, які публікують різні повідомлення. У випадках, коли агент відповість асинхронною відповіддю, див. Метод PostAndAsyncReply . Це повертає робочий процес Async, який ви можете перетворити на завдання, яке можна очікувати в C #, використовуючи метод Async.StartAsTask .
Нарешті, якщо вам потрібно віддалено розподілити своїх акторів, я рекомендую вам перевірити Akka.NET, який пропонує як API C #, так і F #.