Есть ли хорошая реализация участников concurrency модели для .net/С#?
Мне нужно оптимизировать подпрограмму С#, и я думаю, что модель актеров идеально подходит для решения моей проблемы. К сожалению, у меня есть опыт только с реализацией scala.
Есть ли хорошая реализация участников concurrency модели для .net/С#?
Мне нужно оптимизировать подпрограмму С#, и я думаю, что модель актеров идеально подходит для решения моей проблемы. К сожалению, у меня есть опыт только с реализацией scala.
Вам следует взглянуть на MS Concurrency и время выполнения координации (CCR) и Децентрализованные сервисы программного обеспечения (DSS), часть Robotic Studio.
Эти рамки позволят вам разрабатывать слабосвязанные службы, которые удовлетворяют большинству требований к подходу к действию.
Аксум будет лучше всего подходит, к сожалению, он все еще находится в каком-то альфа-бета-фазе (UPDATE, он был убит в феврале 2011 года). Я использую его для своих исследований и должен сказать, что общее направление велико и имеет огромный потенциал.
Not С#, но С++ - это Microsoft Асинхронная библиотека агентов, которая дает вам все необходимые функции.
Посмотрите Параллельные функции.NET 4.
Надеюсь, что это поможет!
https://github.com/AsynkronIT/protoactor-dotnet
https://github.com/akkadotnet/akka.net
Можно также взглянуть на подход Microsoft Orleans Microsoft для актеров (который был выпущен на прошлой неделе)
Это веб-сайт проектов: http://research.microsoft.com/en-us/projects/orleans/
Вот также хороший разговор из сборника 2014 как введение
Использование Orleans для создания распределенных облачных сервисов 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
Содержит абстракции:
Наступающий:
Быстро развивается на момент написания Крисом.
Разработка параллельных приложений требует подхода, который отходит от существующих методов разработки программного обеспечения, подхода, который подчеркивает concurrency и связи между автономными компонентами системы. Модель актера определяет систему программных компонентов, называемых субъектами, которые взаимодействуют друг с другом, обмениваясь сообщениями (вместо вызова методов на интерфейсах в объектно-ориентированном дизайне), создавая систему, в которой данные (вместо управления) проходят через компоненты для удовлетворения функциональные требования системы.
Stact - это библиотека для создания приложений с использованием модели актера в .NET. Основная сборка, Stact.dll, является библиотекой актеров и включает все необходимое для использования модели актера в любом типе приложения. Существуют также дополнительные поддерживающие фреймворки, такие как Stact.ServerFramework, которые могут быть использованы для публикации участников через сокеты или HTTP, что позволяет создавать службы с использованием участников.
NAct - это платформа для .NET, которая использует очень простой в использовании подход. (Отказ от ответственности: я написал его)
Сообщение, проходящее между двумя участниками, представляет собой вызов метода между двумя объектами. Вы должны убедиться, что все аргументы метода неизменяемы, и он будет потокобезопасным.
Он работает, обертывая ваши объекты в прокси-сервер, который имеет дело с переключением потоков. Все обычные функции .NET, особенно события, обрабатываются правильно, поэтому вы можете писать обычный код, а сортировка потоков будет происходить сама по себе.
Там даже ветка с поддержкой С# 5 async/await.
Сегодня Microsoft анонсировала Azure Service Fabric, которая согласно этой картине реализует модель программирования актера:
См. объявление: http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/
Обновление: теперь доступен SDK, и есть видео учебник.
Я не знаю каких-либо реализаций для С#, но есть целый новый язык программирования, основанный на модели Actor от Microsoft. Он называется Axum:
Axum
(ранее кодовое названиеMaestro
) - это параллельный язык программирования, основанный на домене, основанный на модели Actor, разработанный Microsoft. Это объектно-ориентированный язык, основанный на .NET Common Language Runtime, с использованием синтаксиса типа C, который, будучи языком, специфичным для домена, предназначен для разработки частей программного приложения, которое хорошо подходит для concurrency. Но он содержит достаточно универсальных конструкций, которые не нужно переключать на язык программирования общего назначения (например, С#) для последовательных частей параллельных компонентов.
Рассматривали ли вы MailboxProcessor из T, снабженные F #?
Вы также должны рассмотреть Актеры PostSharp
Remact.Net - мой текущий проект. Он использует WebSockets и Json для обмена сообщениями удаленного оператора. Он имеет типы безопасности для участников С#, но также поддерживает динамические типы для основанных на браузере актеров, написанных на Java script.
Мой предыдущий проект был AsyncWcfLib. Это библиотека С# для участников, взаимодействующих в процессе или между различными приложениями. Передача удаленного сообщения использует WCF.
Служба каталогов актеров позволяет открывать актеры на нескольких хостах. Хосты могут запускать Windows или Linux.
Хотя этот вопрос уже получил ответ, я хочу добавить еще одну ссылку для вас. Это реализация concurrency на основе сообщений, и эта библиотека доступна из здесь
Enjoy.
Рамка актера для 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()
)
Отправка двух сообщений участникам акта "schizo" в
let schizo = Actor.spawn (Actor.Options.Create("schizo")) schizoPing
!!"schizo" <-- "Hello"
!!"schizo" <-- "Hello"
Вывод:
(schizo): "Hello" ping
(schizo): "Hello" pong
Просто заметил этот вопрос и подумал добавить новую точку данных. В настоящее время у Microsoft есть полуофициальный проект, называемый ActorFX. Он с открытым исходным кодом и все еще развивается, но стоит следить за...
Как уже упоминалось, класс F # MailboxProcessor предлагает простую и понятную реализацию модели актера. Фантастическое введение о том, как его использовать, доступно здесь. F # очень хорошо взаимодействует с С#, и вы можете обернуть агент в классе методами, которые публикуют разные сообщения. Для случаев, когда агент будет отвечать асинхронным ответом, см. Метод PostAndAsyncReply. Это возвращает рабочий процесс Async, который вы можете превратить в задачу, которую можно ожидать в С#, используя метод Async.StartAsTask.
Наконец, если вам нужно удаленно распространять свои ролики, я рекомендую вам проверить Akka.NET, который предлагает как API С#, так и F #.