В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. В своих приложениях мы обычно используем многопоточность для распараллеливания операций по ядрам и нескольким процессорам на сервере, а для взаимодействия между несколькими серверами различного рода RPC и REST протоколы. При этом использование данных инструментов влечёт за собой ряд трудноразрешимых проблем. Так, при написании многопоточного кода весьма проблематично безопасно и корректно организовать конкуррентный доступ к данным из разных потоков, избежать взаимных блокировок и ситуаций, когда по каким-то причинам два потока обращаются к одним и тем же данным, хотя этого при разработке системы не предполагалось. Классические же сценарии сетевого взаимодействия сильно страдают от того, что они либо не «прозрачны» при использовании и требуют дополнительной логики для преобразования запросов и ответов, либо скрывают за мнимой прозрачностью возможные подводные камни при сетевых ошибках или недоступности той стороны.
Главным же ограничением в использовании этих технологий является то, что для их внедрения необходимо существенным образом изменять имеющийся код. Вы не можете быстро «потушить» проблему, просто залив её дополнительными вычислительными мощностями, уходят часы, дни, недели на доработки кода. Акторная модель призвана избавить разработчика от мыслей о том, в каком потоке и на каком сервере выполняется код. Замена синхронных вызовов на обрабатываемые по одному синхронные сообщения позволяет писать код, одинаково хорошо работающий как в одном потоке, так и на сервере с несколькими процессорами, а механизм обеспечения сетевой прозрачности позволяет не видеть разницы между актором, запущенным локально и удалённо.
Доклад рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. Речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.